Итерация по сложному ассоциативному массиву в PHP

Есть ли простой способ итерации по ассоциативному массиву этой структуры в PHP:

Массив $searches имеет нумерованный индекс, от 4 до 5 ассоциативных частей. Поэтому мне нужно не только перебирать $searches[0] через $searches[n] , но и $searches[0]["part0"] через $searches[n]["partn"] $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"; } 

Я знаю, что это вопрос некромантии, но итерации по многомерным массивам легко с помощью итераторов Spl

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

Видеть

Похоже на хорошее место для рекурсивной функции, особенно. если у вас будет более двух уровней глубины.

 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"; } } 

Можете ли вы просто перебрать все элементы «part [n]» и использовать isset, чтобы узнать, существуют ли они на самом деле или нет?

Я действительно не уверен, что вы здесь имеете в виду – наверняка пара петель foreach делает то, что вам нужно?

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

Или вам нужно что-то рекурсивное? Я бы мог больше помочь с примерами данных и контекстом в том, как вы хотите вернуть данные.

Рассмотрим этот многомерный массив, надеюсь, эта функция поможет.

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