У меня есть этот маленький фрагмент, чтобы получить идентификаторы из многомерного массива.PHP рекурсия, где поставить return
<?php
$array = array(
array(
'id' => 1,
'children' => array(
array(
'id' => 12,
'children' => array()
),
array(
'id' => 13,
'children' => array(
array(
'id' => 112,
'children' => array()
)
)
)
)
),
array(
'id' => 140,
'children' => array(
array(
'id' => 144,
'children' => array(
array(
'id' => 101,
'children' => array()
)
)
)
)
),
array(
'id' => 32,
'children' => array(
array(
'id' => 223,
'children' => array()
)
)
),
array(
'id' => 40,
'children' => array()
)
);
function get_ids($array, $result)
{
foreach($array as $a)
{
$result[] = $a['id'] . "\n";
if (count($a['children']))
{
return get_ids($a['children'], $result);
}
}
return $result;
}
print_r(get_ids($array, array()));
Этого код выводит первую иду массива так:
Array
(
[0] => 1
[1] => 12
[2] => 13
[3] => 112
)
Если я вместо $ результата [] положил эхо и удаляет возврат на возвращении get_ids грести он повторяет каждый идентификатор, как задуман, проблема в том, что я хотел бы иметь их в симпатичном массиве с идентификаторами.
Я думаю, что испортил заявления о возврате, но я понятия не имею.
Вы можете сделать это по ссылке (использование '* & $ result' в качестве параметра), но это вряд ли нужно: использовать '$ result = array_merge ($ result, get_ids ($ a ['children']))' вместо первого 'return' в функции, и вы тоже будете в порядке. – Wrikken