在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 } }