2014-03-29 109 views
0

我有幾個例子數組:得到許多陣列的所有可能的迭代在PHP

array(
    'color' => array('red', 'blue', ...); 
    'size' => array('small', 'big', ...); 
    'temp' => array('hot', 'cold', ...); 
    ... 
) 

是否有一個功能,所以我可以得到這些陣列的所有可能的重複? (如果需要更多的數組和值)。 例如結果應該是:

array(
    0 => array('color'=> 'red', 'size'=>'small', 'temp'=>'hot') 
    1 => array('color'=> 'red', 'size'=>'small', 'temp'=>'cold') 
    2 => array('color'=> 'red', 'size'=>'big', 'temp'=>'hot') 
    3 => array('color'=> 'red', 'size'=>'big', 'temp'=>'cold') 
) 

...等等。

+0

你尋找什麼類型的輸出? – Zalaboza

+0

數組,我已經更新了問題 – abiku

+0

'(如果需要,還有更多的數組)'你打算如何將數組注入想要的函數。在你的例子中,它們是預定義的,是否所有的東西都會被組合成一個大數組? – Zalaboza

回答

1

使用遞歸方法:

function generateCombinations($array, $start = 0) { 
    $size = count($array); 
    if ($size == $start) { 
     return array(''); 
    } 
    $result = array(); 
    foreach ($array[$start] as $val) { 
     foreach (generateCombinations($array, $start + 1, $size) as $last) { 
      $result[] = $val . ' ' . $last; 
     } 
    } 
    return $result; 
} 

用法:

$array = array(
    array('red', 'blue'), 
    array('small', 'big'), 
    array('hot', 'cold') 
); 

$result = generateCombinations($array); 
print_r($result); 

輸出:

Array 
(
    [0] => red small hot 
    [1] => red small cold 
    [2] => red big hot 
    [3] => red big cold 
    [4] => blue small hot 
    [5] => blue small cold 
    [6] => blue big hot 
    [7] => blue big cold 
) 

Online Demo