Как вывести уровень вложенности в массиве?

 
Посетитель
small user social cms
МедальКубок зрительских симпатийАвторитет форума
Сообщений: 1035
Уважаемые кодеры, прошу помощи. Я видимо уже совсем отупел за последние дни))

Есть функция
Код PHP:
  1.  
  2. //$arr - массив
  3. //$id - ключ(идентификатор) нужного элемента массива
  4. public function newTree($arr, $id){
  5. foreach ($arr as $key => $item) {
  6. if ($id == $key) {
  7. return $item;
  8. } elseif (!empty($item['children']) && is_array($item['children'])) {
  9. $result = $this->newTree($item['children'], $id);
  10. if ($result !== false) {
  11. return $result;
  12. }
  13. }
  14. }
  15. return false;
  16. }
  17.  
  18.  
Функция ищет в многомерном массиве нужный элемент.

Как мне вывести уровень вложенности этого элемента?

Пробовал делать так, не получается
Спойлер
Редактировалось: 1 раз (Последний: 10 декабря 2013 в 21:53)
Посетитель
small user social cms
МедальКубок зрительских симпатийАвторитет форума
Сообщений: 1035
kir, ты не понял, или я хреново объяснил), сам нужный элемент по ключу я нахожу, я не могу вывести его уровень вложенности. Т.е цифру, которая соответствует уровню вложенности
Реклама
cms
Посетитель
small user social cms
Медаль
Сообщений: 150
Rossoman:

kir, ты не понял, или я хреново объяснил), сам нужный элемент по ключу я нахожу, я не могу вывести его уровень вложенности. Т.е цифру, которая соответствует уровню вложенности

Код PHP:
  1.  
  2. function findDeepInArray($array, $key, $level = -1, $deep = array('find' => false, 'level' => 0))
  3. {
  4. $level++;
  5. if(!is_array($array)){
  6. return $deep;
  7. }
  8.  
  9. if(isset($array[$key])) {
  10. $deep = array(
  11. 'find' => true,
  12. 'level' => $level
  13. );
  14. } else {
  15. foreach($array as $value){
  16. $deep = findDeepInArray($value, $key, $level, $deep);
  17. }
  18. }
  19.  
  20. return ($level) ? (($deep['find'] == true) ? $deep : $deep) : (($deep['find'] == true) ? $deep['level'] : false);
  21.  
  22. }
  23.  
сорри не заметил, код не оч. нравится, но в 6 утра хочется спать, а не кодить crazy

0 уровень - начальный, итп
Посетитель
small user social cms
МедальКубок зрительских симпатийАвторитет форума
Сообщений: 1035
kir, я и забыл сколько времени у тебя)) спс, попробую, завтра теперь отпишусь
Посетитель
small user social cms
МедальКубок зрительских симпатийАвторитет форума
Сообщений: 1035
kir, работает вроде, только уровень выводит не как 1,2,3 - а 2,4,6 ))
Посетитель
small user social cms
МедальКубок зрительских симпатийАвторитет форума
Сообщений: 1035
kir, за наводку спасибо) Посмотрел на свежую голову и поправил свою функцию, плюсодинил не в том месте. Надо было просто плюсодин вынести из цикла.
Посетитель
small user social cms
Медаль
Сообщений: 150
Rossoman:
kir, работает вроде, только уровень выводит не как 1,2,3 - а 2,4,6 ))

тестировал на произвольном многомерном массиве со строковыми ключами, выводило всё нормально по уровням, значит входной массив не совсем обычный у тебя.;)

да не за что собственно говоря. ;)
Редактировалось: 1 раз (Последний: 11 декабря 2013 в 19:41)
В начало страницы
Предыдущая темаСледующая тема Перейти на форум:
Быстрый ответ
Чтобы писать на форуме, зарегистрируйтесь или авторизуйтесь.