Я вызываю функцию, которая выполняет некоторую рекурсию и должна возвращать массив. Фактически, var_dump непосредственно перед оператором return в вызываемой функции выводит массив; однако var_dump результатов от вызывающей функции показывает NULL вместо массива.
Вот вызывающая функция.
<?php // configuration require_once("../includes/config.php"); require_once("../includes/getParentNodes.php"); $bottomNode = 17389; $chain = []; $chain[] = $bottomNode; $results = getParentNodes($bottomNode,$chain); var_dump($results); ?>
Вот вызванная функция.
<?php function getParentNodes($node, $results) { $select = query("SELECT parent_id FROM classifications WHERE node_id = ?", $node); $parent = implode("",$select[0]); if (!empty($parent)) { $results[] = $parent; getParentNodes($parent,$results); } else { return $results; } } ?>
Если я поместил var_dump непосредственно перед обратным вызовом, я получаю следующее.
Array ( [0] => 17389 [1] => 17386 [2] => 17334 [3] => 16788 [4] => 15157 [5] => 10648 [6] => 3962 [7] => 665 [8] => 39 [9] => 1 )
Однако var_dump в вызывающей функции создает NULL.
Я прочитал руководство и связанные с ним должности, но никто не прояснил эту проблему. Любая помощь приветствуется.
Вам не хватает return
в рекурсивном случае.
$results[] = $parent; return getParentNodes($parent,$results);
В коде есть небольшая ошибка:
function getParentNodes($node, $results) { $select = query("SELECT parent_id FROM classifications WHERE node_id = ?", $node); $parent = implode("",$select[0]); if (!empty($parent)) { $results[] = $parent; return getParentNodes($parent,$results); // <- modified } else { return $results; } }