2012-01-08 16 views
0

我已經問過這個問題一次在Python的解決方案:合併的數組項

python intersect of dict items

但我現在正在尋找在PHP中的同類解決方案。具體來說,我在ConsoleShell上使用CakePHP 2.0。

我有一個數組巢的人數不詳,我想遍歷他們是這樣的:

$array = array(1 => array(1, 2, 3, 4), 2 => array(7, 8), n => array(n1, n2, n3)) 

foreach($array[1] as $k1 => $v1) { 
    foreach($array[2] as $k2 => $v2) { 
    foreach($array[n] as $kn => $vn) { 
     // do something with this combination 
    } 
    } 
} 

記住,n可以是任意數字(巢的總數),所以我需要允許動態數量巢的代碼。

有什麼想法嗎?

感謝 編輯: 只是爲了澄清我是什麼後,如果

$array = array(array(0, 1, 2, 3), array(0, 6, 7), array(0, 9, 10)); 

我想結束了:

$array2 = array(
    array(0, 0, 0), 
    array(0, 0, 9), 
    array(0, 0, 10), 
    array(0, 6, 0), 
    array(0, 6, 9), 
    ... 
    array(3, 6, 10), 
    array(3, 7, 0), 
    array(3, 7, 9), 
    array(3, 7, 10) 
); 
然而

如果$陣列有4個數組元素,那麼$ array2應在每條線上有4個元素等。

+0

這不是一個確切的重複!差遠了。請重新閱讀我的問題。 – khany 2012-01-08 19:34:25

+1

你想要結果是什麼?也許你可能想解釋你想要完成的事情,對於那些不瞭解Python問題解決方案的人。 – BoltClock 2012-01-08 20:00:37

回答

1
function dosomething($a) { 
    if (is_array($a)) 
    foreach ($a as $aa) 
     dosomething($aa) 
    else { 
    //do something 
    } 
} 

編輯:

OQ更新後,很明顯,深度不是變量,而是元素數。所以我們不需要遞歸,但嵌套foreach ES

這給作爲OQ

<?php 
$array = array(array(0, 1, 2, 3), array(0, 6, 7), array(0, 9, 10)); 

$result=array(array()); 
foreach ($array as $a) { 
    $oldresult=$result; 
    $result=array(); 
    foreach ($oldresult as $or) { 
    foreach($a as $aa) { 
     $nr=$or; 
     $nr[]=$aa; 
     $result[]=$nr; 
    } 
    } 
} 

print_r($result); 
?> 

總之要求輸出:我們先從一個結果數組,有一個元素:一個空數組。現在我們遍歷輸入數組的第一級,在每一步中,我們用結合數組的所有元素替換原始元素與我們當前數組的每個成員相連的一系列元素。

第一次迭代取代

array() with array(0), array(1), array(2), array(3) 

第二次迭代取代

array(0) with array(0,0), array(0,6), array(0,7) 
array(1) with array(1,0), array(1,6), array(1,7) 
... 

第三次迭代取代

array(0,0) with array(0,0,0), array(0,0,9), array(0,0,10) 
array(0,1) with array(0,1,0), array(0,1,9), array(0,1,10) 
... 
array(1,0) with array(1,0,0), array(1,0,9), array(1,0,10) 
... 
+0

謝謝,但所有這些告訴我如何遍歷數組。我需要知道的是「//做點什麼」。 – khany 2012-02-10 12:09:12

+0

難怪,因爲我在更新問題之前給出了這個答案;-) – 2012-02-10 12:49:45

+0

用一個工作解決方案編輯了我的答案 – 2012-02-10 13:55:50