За последние 24 часа нас посетили 19350 программистов и 1608 роботов. Сейчас ищут 927 программистов ...

Обработка многомерного массива

Тема в разделе "PHP для новичков", создана пользователем AndreyIvanov, 6 апр 2013.

  1. AndreyIvanov

    AndreyIvanov Активный пользователь

    С нами с:
    22 мар 2013
    Сообщения:
    18
    Симпатии:
    0
    Доброго времени суток!

    Никак не могу сделать следующее

    Есть массив, к примеру такой
    Код (Text):
    1. array
    2. (
    3.     [id] => 19
    4.     [name] => Категория 1
    5.     [position] => 0
    6.     [childs] => array
    7.     (
    8.         [20] => array
    9.         (
    10.             [id] => 20
    11.             [name] => Категория 2
    12.             [position] => 0
    13.             [childs] => array
    14.             (
    15.                 [21] => array
    16.                 (
    17.                     [id] => 21
    18.                     [name] => Категория 3
    19.                     [position] => 0
    20.                     [childs] => array
    21.                     (
    22.                     )
    23.                 )
    24.             )
    25.         )
    26.     )
    27. )
    childs может быть и 10 и 15 и 0

    Мне нужно в результате получить такой массив (структура вложенности важна. именно такой порядок, от начала массива и до конца.)
    Код (Text):
    1. Array
    2. (
    3.     [0] => Категория 1
    4.     [1] => Категория 2
    5.     [2] => Категория 3
    6. )
    Пробовал как-то рекурсивно, смотрел что-то подобное, но ничего не вышло.

    Я пытаюсь сделать экспорт новостей. И это категории новостей. Т.е. новость лежит в категории "Категория 3" и нужно получить массив, чтобы дальше я его обработал как нужно.

    Буду признателен за любую помощь!
     
  2. MouseZver

    MouseZver Суперстар

    С нами с:
    1 апр 2013
    Сообщения:
    7.819
    Симпатии:
    1.333
    Адрес:
    Лень
  3. AndreyIvanov

    AndreyIvanov Активный пользователь

    С нами с:
    22 мар 2013
    Сообщения:
    18
    Симпатии:
    0
    У меня один многомерный массив.
    Ту тему я смотрел, но и вопрос и решение не подходят под мою задачу(
     
  4. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    Код (PHP):
    1. $a = array(
    2.     'id' => 19,
    3.     'name' => 'Категория 1',
    4.     'position' => 0,
    5.     'childs' => array(
    6.         20 => array(
    7.             'id' => 20,
    8.             'name' => 'Категория 2',
    9.             'position' => 0,
    10.             'childs' => array(
    11.                 21 => array(
    12.                     'id' => 21,
    13.                     'name' => 'Категория 3',
    14.                     'position' => 0,
    15.                     'childs' => array()
    16.                 )
    17.             )
    18.         )
    19.     )
    20. );
    21.  
    22. function fn($array) {
    23.   $r = array();
    24.   foreach ($array as $key => $val) {
    25.     if (is_array($val)) {
    26.       if (isset($val['name'])) {
    27.         $r[] = $val['name'];
    28.       }
    29.       if (!empty($val['childs'])) {
    30.         $r = array_merge($r, fn($val['childs']));
    31.       }
    32.     }
    33.   }
    34.   return $r;
    35. }
    36.  
    37. var_dump(fn(array($a))); 
     
  5. Invision

    Invision Активный пользователь

    С нами с:
    26 фев 2009
    Сообщения:
    1.437
    Симпатии:
    1
    Адрес:
    Томск
    Предлагаю такую реализацию (PHP >= 5.3):

    Код (PHP):
    1. $data = array(
    2.     'id' => 19,
    3.     'name' => 'Категория 1',
    4.     'position' => 0,
    5.     'childs' => array(
    6.         20 => array(
    7.             'id' => 20,
    8.             'name' => 'Категория 2',
    9.             'position' => 0,
    10.             'childs' => array(
    11.                 21 => array(
    12.                     'id' => 21,
    13.                     'name' => 'Категория 3',
    14.                     'position' => 0,
    15.                     'childs' => array()
    16.                 )
    17.             )
    18.         )
    19.     )
    20. );
    21.  
    22. $result = array();
    23. array_walk_recursive($data, function($item, $key) use (&$result) {
    24.     if($key == 'name') {
    25.         $result[] = $item;
    26.     }
    27. });
    28. // результат (Array ( [0] => Категория 1 [1] => Категория 2 [2] => Категория 3 ))
    29. print_r($result); 
     
  6. AndreyIvanov

    AndreyIvanov Активный пользователь

    С нами с:
    22 мар 2013
    Сообщения:
    18
    Симпатии:
    0
    Ребята, большое спасибо, получилось!