Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: kombinacje zestawów wartości tablicy
Forum PHP.pl > Forum > PHP
yoyo
[php:1:585bb24194]
<?php
$koszulka = array
(
'kolor' => array
(
0 => 'Zielony',
1 => 'Czerwony',
2 => 'Żółty'
),
'rozmiar' => array
(
0 => 'S',
2 => 'M',
6 => 'L'
),
'typ' => array
(
3 => 'Męska',
9 => 'Damska'
)
);
?>
[/php:1:585bb24194]

w jaki sposób wybrać wszystkie kombinacje, tak aby uzyskać:
Zielony, S, Męska
Zielony, S, Damska
Zielony, M, Męska
Zielony, M, Damska
Zielony, L, Męska
Zielony, L, Damska
Czerwony, S, Męska
Czerwony, S, Damska
Czerwony, M, Męska
...
itd itd

oczywiście chodzi mi o funkcję która rekursywnie będzie tworzyła kombinację bez względu na ilość cech i wartości cech. Zauważcie, że klucze tablic z wartościami są dowolne, nie są po kolei.
dziękuję z góry za wszelką pomoc.
kszychu
[php:1:d9e725b6b7]<?php
foreach( $koszulka['kolor'] as $kolor ) {
foreach( $koszulka['rozmiar'] as $rozmiar ) {
foreach( $koszulka['typ'] as $typ ) {
echo $kolor.", ".$rozmiar.", ".$typ."n";
}
}
}
?>[/php:1:d9e725b6b7]

Nie testowałem...
yoyo
kszychu:
Cytat
oczywiście chodzi mi o funkcję która rekursywnie będzie tworzyła kombinację bez względu na ilość cech i wartości cech.
kszychu
ups.... sorry, nie doczytałem.
yoyo
no hope?
hawk
Algorytm:
[php:1:6505ac8e15]<?php

$koszulka = array
(
'kolor' => array
(
0 => 'Zielony',
1 => 'Czerwony',
2 => 'Żółty'
),
'rozmiar' => array
(
0 => 'S',
2 => 'M',
6 => 'L'
),
'typ' => array
(
3 => 'Męska',
9 => 'Damska'
)
);

$keys = array_keys($koszulka);
$values = array();
foreach ($koszulka as $val) {
$values[] = array_values($val);
}

$numTypes = count($keys);

$numTotal = 1;
$switch = array(0 => 1);
$result = array();

for ($i=0; $i<$numTypes; $i++) {
$tmp = count($values[$i]);
$switch[$i+1] = $switch[$i] * $tmp;
$numTotal *= $tmp;
}

for ($i=0; $i<$numTotal; $i++) {
for ($j=0; $j<$numTypes; $j++) {
$result[$j] = $values[$j][floor($i / $switch[$j]) % count($values[$j])];
}
echo implode(', ', $result) . "<br>n";
}
?>[/php:1:6505ac8e15]
Wynik:
Kod
Zielony, S, Męska

Czerwony, S, Męska

Żółty, S, Męska

Zielony, M, Męska

Czerwony, M, Męska

Żółty, M, Męska

Zielony, L, Męska

Czerwony, L, Męska

Żółty, L, Męska

Zielony, S, Damska

Czerwony, S, Damska

Żółty, S, Damska

Zielony, M, Damska

Czerwony, M, Damska

Żółty, M, Damska

Zielony, L, Damska

Czerwony, L, Damska

Żółty, L, Damska

:wink:
yoyo
śliczne dzięki
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.