Приветствую. Много тем существует по получению имени элемента многомерных массивов с использованием key(), но это не тот случай. В моем случае я использую многомерный массив сформированный из JSON данных типа: Код (Text): main: [{ "content1": "...", "content2": "...", "sub": { "content10": "...", "content20": "...", "demosub": [{ "content100": "...", "content200": "...", Тэги в примере выше не закрываю, структура думаю и так ясна и она в рабочей версии верная. Так вот, у меня нет проблемы обратиться к элементу массива после обработки JSON путем: $arr[main][0]['sub'][content10'], а есть задача получить все элементы массива "sub" тобиш сделать это нужно по его имени. Я использую функцию рекурсии для перебора всех элементов массива: Код (Text): function ArrRunner($arr,$tagFilter){ foreach($arr as $a){ if (is_array($a)){ ArrRunner($a,$tagFilter); }else{} } } И куда и как я не втыкал "echo key();" пытаясь получить или key от $a или key от $arr, мне никак не возвращается имя вложенного массива. Там где оно вроде должно быть возвращается "0", но у меня дофига разных субмассивов и мне нужны конкретные по конкретным именам, так что проверка по 0 не прокатит. Как быть? Нужно узнать имя суб массива, или его элементов (на примере они "content10" и ""content20", но их key (элементов массива sub) различны, тобиш мне надо получить в итоге из массива(массивов) с именем "sub" все его элементы и их ключи без получения значений и ключей их суб элементов и суб массивов (в примере это demosub, content100, content200)). Дополню, что суб массивы с именем sub могут встречаться много раз и на разных уровнях вложенности главного массива - потому я использую рекурсию.
Об этом идёт речь? https://secure.php.net/manual/ru/control-structures.foreach.php Код (PHP): foreach (array_expression as $key => $value)
По описанию похоже, чуть позже проверю. Проблема в том, что у меня может быть $arr[main][0].......сколько угодно и чего угодно.........['sub']....много всего....[sub]..дофига..[sub].... тобиш у меня нет чёткой структуры - она может меняться, но там почти всегда будет некий суб массив с определенным именем и мне нужно из него или из их (их может быть много и они могут быть вложены даже друг в друга), получить их элементы 1го уровня вложенности.
Всё получилось, спасибо. На всякий случай моя функция, перебирает все элементы многомерного массива и выводит значения содержащиеся в именованном саб массиве (имя которого указывается в параметре) не выводя при этом значения и массивы находящиеся глубже 1 уровня. Может ее как то оптимизировать можно еще (я о логике,а не о сокращениях в самом написании) Код (PHP): function ArrRunner($arr,$tagFilter){ foreach ($arr as $key => $val){ if (is_array($val)){ if($key==$tagFilter){ if (isset($val['images'])) { foreach ($val['images'] as $key2 => $val2){ echo $key2."<br>"; } } ArrRunner($val,$tagFilter); }else{ ArrRunner($val,$tagFilter); } } } } PHP, JavaScript, SQL и другой код пишите внутри тегов Код ( (Unknown Language)): [b]php][/b]Тут код[b][/[/b][b]code][/b][/color]
Вот замануха... А как мне теперь сделать так, что бы вместо echo, функция в итоге вернула массив двухмерный с результатом отработки? Что то я уже и передвать параметром пытался, и в конце вывести результат пробовал.
ок. сейчас еще раз попробую, уже просто пробовал но как то не особо вышло. пока возвращаю функцией в себя примерно вот так Код (Text): $aaa[] = ArrRunner($val,$tagFilter); и потом уже в конце ретурню этот же массив. Но там стока вложенных массивов выходит что пипец.