У меня есть следующий массив
Array
(
['colour'] => Array
(
[0] => 1130
[1] => 1131
[2] => 1132
[3] => 1133
)
['size'] => Array
(
[0] => 1069
[1] => 1070
)
//there could also be further arrays here such as weight etc
)
Я хочу получить все возможные перестановки — такие как
Colour 1130 - Size 1069
Colour 1130 - Size 1070
Colour 1131 - Size 1069
Colour 1131 - Size 1070
Colour 1132 - Size 1069
etc
Но, очевидно, не хотят иметь перестановки, которые содержат более 1 каждого типа (элемент не может быть как синим и красным, так и большим и средним)
обратите внимание, что все клавиши цифровые, я изменил их здесь на цвет, размер, чтобы сделать его более понятным (надеюсь!)
Я взял декартову функцию от этот ответ, и учитывая результат, который вы хотели.
(Кредит Sergiy для создания функции)
<?php
$array = Array
(
'colour' => Array
(
1130,
1131,
1132,
1133
),
'size' => Array
(
1069,
1070
)
);
echo "<pre>";
$arrFinalArray = cartesian($array);
foreach( $arrFinalArray as $arrIndie) {
//We know each as 2 keys
$arrKeys = array_keys($arrIndie);
$arrValues = array_values($arrIndie);
echo $arrKeys[0] ." ". $arrValues[0] ." - ". $arrKeys[1] ." ". $arrValues[1] ."<br />";
}
echo "</pre>";function cartesian($input) {
// filter out empty values
$input = array_filter($input);
$result = array(array());
foreach ($input as $key => $values) {
$append = array();
foreach($result as $product) {
foreach($values as $item) {
$product[$key] = $item;
$append[] = $product;
}
}
$result = $append;
}
return $result;
}
$col = array('color'=>array(1130,1131,1132,1133));
$size = array('size'=>array(1069,1070));
$new_col = array();
foreach($col['color'] as $i=>$c){
$new_col[]= "Color ". $c;
}
$new_size = array();
foreach($size['size'] as $i=>$s){
$new_size[]= "Size ". $s;
}
$new_array = array();
foreach($new_col as $nc){
foreach($new_size as $ns){
$new_array[] = $nc. " ".$ns;
}
}
print_r($new_array);