Подскажите, есть многомерный ассоциативный массив, нужно из него выводить значение по ключу, сделал функцию из foreach, выглядит страшно и не подходит, если глубина массива меньше заявленной, или нужный ключ находится выше, чем тот что выводится по return PHP: function eventListner ($array, $type){ // $i = 1; // $k = 'k'.$i; // $m = 'm'.$i; foreach($array as $k1 => $m1) { foreach($m1 as $k2 => $m2) { foreach($m2 as $k3 => $m3) { foreach($m3 as $k4 => $m4) { foreach($m4 as $k5 => $m5) { foreach($m5 as $k6 => $m6) { foreach($m6 as $k7 => $m7) { foreach($m7 as $k8 => $m8) { foreach($m8 as $k9 => $m9) { foreach($m9 as $k10 => $value) { if($k10 == $type) return $value; }}}}}}}}}} } echo eventListner($test, 'my_key'); Пробую сделать через присвоение номера массива через i, в ту сторону вообще иду? Может можно как то по другому упросить код?
для таких целей есть рекурсия. если искомый ключ не повторяется, то можно сделать так: PHP: function findValueByKey($inputArray, $findKey) { foreach ( $inputArray as $key => $value ) { if ( $findKey == $key ) { return $value; } elseif ( is_array( $value ) ) { $tmp = findValueByKey($value, $findKey); if ( $tmp !== false ) { return $tmp; } } } return false; } } будет работать при условии, что в массиве нет булевых false ну и вернет значение первого встретившегося элемента с подходящим ключом.
Зачем так? достаточно просто PHP: } elseif ( is_array( $value ) ) { retun findValueByKey($value, $findKey); }
не достаточно на первом же вложенном массиве всё закончится независимо от того, есть в нём искомый ключ или нет.
> или нужный ключ находится выше, чем тот что выводится по return Если имеется ввиду, что значение - не массив (и похоже на то, если выводите результат через echo, как простое значение), то можно так: PHP: function eventListner($array, $type){ $jsonIterator = new RecursiveIteratorIterator(new RecursiveArrayIterator($array),RecursiveIteratorIterator::SELF_FIRST); foreach ($jsonIterator as $key => $val){ if($key == $type && !is_array($val)) return $val; } return false; }
Поговорили? А теперь главный вопрос откуда этот массив? 90% случаев массив это результат выборки из БД со всеми вытекающими...
Большое спасибо всем за ответы! Вот это то, что нужно: Отдельное спасибо за рекурсию, интересная штука буду изучать))