#php
#php
Вопрос:
У меня есть следующий шаблон массива.
Array
(
[0] => Array
(
[label] => 2011
[subtable] => Array
(
[0] => Array
(
[label] => 05
[subtable] => Array
(
[0] => Array
(
[label] => /hello-world.html
[url] => http://example.com/2011/05/hello-world.html
)
[1] => Array
(
[label] => /test-test-test.html
[url] => http://example.com/2011/05/test-test-test.html
)
)
)
[1] => Array
(
[label] => 04
[subtable] => Array
(
[0] => Array
(
[label] => /i-have-some-problem-with-gfc-updates.html
[url] => http://example.com/2011/04/i-have-some-problem-with-gfc-updates.html
)
[1] => Array
(
[label] => /testing-for-google-frineds-update.html
[url] => http://example.com/2011/04/testing-for-google-frineds-update.html
)
)
)
[2] => Array
(
[label] => /05
[url] => http://example.com/2011/05
)
[3] => Array
(
[label] => /04
[url] => http://example.com/2011/04
)
)
)
[1] => Array
(
[label] => /index
[url] => http://example.com/
)
)
Я хочу получить «label» и «url» в другой массив, например
array(
[0] = array([label] => a [url] => http://example.com/a/)
[1] = array([label] => b [url] => http://example.com/b/)
)
Как я могу достичь этого с помощью рекурсии или путем передачи его функции?
Ответ №1:
Для этого вы можете использовать array_walk_recursive:
$parsed_array = array();
function parse_array($item, $key) {
global $parsed_array;
if(is_array($item) amp;amp; isset($item['url'])) {
$parsed_array[] = $item;
}
}
array_walk_recursive($your_array, 'parse_array');
Или вы можете реализовать это с помощью рекурсивной функции:
function parse_array($array) {
$result = array();
foreach($array as $item) {
if(isset($item['subtable'])) {
$result = array_merge($result, parse_array($item['subtable']));
}else{
$result[] = $item;
}
}
return $result;
}
$parsed_array = parse_array($your_array);
Комментарии:
1. @Emil: что возвращает рекурсивная функция parse_array()?
2. рекурсивная функция parse_array () не работает, она возвращает мне то же самое
3. Он по-прежнему возвращает мне тот же массив: (
4. Я также ошибочно повторил $array[‘subtable’] вместо $item[‘subtable’]. Это тоже изменено и проверено, что это действительно работает.