Доброго времени суток! Никак не могу сделать следующее Есть массив, к примеру такой Код (Text): array ( [id] => 19 [name] => Категория 1 [position] => 0 [childs] => array ( [20] => array ( [id] => 20 [name] => Категория 2 [position] => 0 [childs] => array ( [21] => array ( [id] => 21 [name] => Категория 3 [position] => 0 [childs] => array ( ) ) ) ) ) ) childs может быть и 10 и 15 и 0 Мне нужно в результате получить такой массив (структура вложенности важна. именно такой порядок, от начала массива и до конца.) Код (Text): Array ( [0] => Категория 1 [1] => Категория 2 [2] => Категория 3 ) Пробовал как-то рекурсивно, смотрел что-то подобное, но ничего не вышло. Я пытаюсь сделать экспорт новостей. И это категории новостей. Т.е. новость лежит в категории "Категория 3" и нужно получить массив, чтобы дальше я его обработал как нужно. Буду признателен за любую помощь!
Код (PHP): $a = array( 'id' => 19, 'name' => 'Категория 1', 'position' => 0, 'childs' => array( 20 => array( 'id' => 20, 'name' => 'Категория 2', 'position' => 0, 'childs' => array( 21 => array( 'id' => 21, 'name' => 'Категория 3', 'position' => 0, 'childs' => array() ) ) ) ) ); function fn($array) { $r = array(); foreach ($array as $key => $val) { if (is_array($val)) { if (isset($val['name'])) { $r[] = $val['name']; } if (!empty($val['childs'])) { $r = array_merge($r, fn($val['childs'])); } } } return $r; } var_dump(fn(array($a)));
Предлагаю такую реализацию (PHP >= 5.3): Код (PHP): $data = array( 'id' => 19, 'name' => 'Категория 1', 'position' => 0, 'childs' => array( 20 => array( 'id' => 20, 'name' => 'Категория 2', 'position' => 0, 'childs' => array( 21 => array( 'id' => 21, 'name' => 'Категория 3', 'position' => 0, 'childs' => array() ) ) ) ) ); $result = array(); array_walk_recursive($data, function($item, $key) use (&$result) { if($key == 'name') { $result[] = $item; } }); // результат (Array ( [0] => Категория 1 [1] => Категория 2 [2] => Категория 3 )) print_r($result);