2014-09-29 38 views
0

我有以下陣列獲取所有置換PHP

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個的排列(一個項目不能同時是藍色和紅色,或者都是大和中)

請注意,所有的鍵都是數字,我在這裏將它們改爲顏色,以使其更清晰(希望!)

+1

可能重複(http://stackoverflow.com/問題/ 6311779 /發現 - cartesian產品與php的聯想陣列) – georg 2014-09-29 09:29:07

回答

0

我已經從this answer獲得了笛卡爾函數,並給出了您想要的輸出。

(信用到sergiy用於創建函數)[查找笛卡爾積用PHP關聯數組]的

https://eval.in/199787

<?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; 
} 
+0

謝謝!這正是我所期待的 – Buzzmonkey 2014-09-29 09:43:37

0
$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);