在PHP中迭代复杂的关联数组

有没有一种简单的方法来在PHP中迭代此结构的关联数组:

数组$searches有一个编号索引,有4到5个关联部分。 所以我不仅需要通过$searches[n]["partn"]迭代$searches[0]$searches[n] ,还要$searches[0]["part0"] $searches[n]["partn"] 。 困难的部分是不同的索引有不同的部分数量(有些可能会丢失一两个)。

以这样一种好的,整洁的和可以理解的方式来思考这个问题?

嵌套两个foreach循环 :

 foreach ($array as $i => $values) { print "$i {\n"; foreach ($values as $key => $value) { print " $key => $value\n"; } print "}\n"; } 

我知道这是necromancy的问题,但迭代multidimensional array很容易使用Spl迭代器

 $iterator = new RecursiveIteratorIterator(new RecursiveArrayIterator($array)); foreach($iterator as $key=>$value) { echo $key.' -- '.$value.'<br />'; } 

看到

看起来像一个recursion函数的好地方, 如果你有两个以上的深度。

 function doSomething(&$complex_array) { foreach ($complex_array as $n => $v) { if (is_array($v)) doSomething($v); else do whatever you want to do with a single node } } 

你应该可以使用嵌套的foreach语句

从PHP手册

 /* foreach example 4: multi-dimensional arrays */ $a = array(); $a[0][0] = "a"; $a[0][1] = "b"; $a[1][0] = "y"; $a[1][1] = "z"; foreach ($a as $v1) { foreach ($v1 as $v2) { echo "$v2\n"; } } 

你可以循环所有的“部分[n]”项目,并使用isset来查看它们是否真的存在吗?

我真的不确定你在这里的意思 – 当然,一对foreach循环做你所需要的?

 foreach($array as $id => $assoc) { foreach($assoc as $part => $data) { // code } } 

或者你需要recursion吗? 我可以帮助更多的例子数据和上下文如何你想返回的数据。

考虑这个multidimensional array,我希望这个function会有所帮助。

 $n = array('customer' => array('address' => 'Kenmore street', 'phone' => '121223'), 'consumer' => 'wellington consumer', 'employee' => array('name' => array('fname' => 'finau', 'lname' => 'kaufusi'), 'age' => 32, 'nationality' => 'Tonga') ); iterator($n); function iterator($arr){ foreach($arr as $key => $val){ if(is_array($val))iterator($val); echo '<p>key: '.$key.' | value: '.$val.'</p>'; //filter the $key and $val here and do what you want } }