У меня есть иерархические данные, которые я помещаю в массив, который я называю $ dt. Чем у меня есть массив, в котором хранятся отношения между этими данными, которые я называю $ in. Я создал функцию, которая имеет в качестве параметра, начальный индекс, уровень, массив $ dt массив $ in. Я отлаживал функцию, но не нашел, почему подкласс теряется во время процесса. Полный код:Рекурсивная функция PHP возвращает неожиданный массив
$dt = array(
41=>array("pk"=>41,"parentPk"=>30,"name"=>"car1"),
15=>array("pk"=>15,"parentPk"=>11,"name"=>"food"),
70=>array("pk"=>70,"parentPk"=>30,"name"=>"car3"),
18=>array("pk"=>18,"parentPk"=>15,"name"=>"food1"),
49=>array("pk"=>49,"parentPk"=>30,"name"=>"car2"),
20=>array("pk"=>20,"parentPk"=>15,"name"=>"food2"),
30=>array("pk"=>30,"parentPk"=>11,"name"=>"car")
);
echo "<pre>";
print_r($dt);
echo "</pre>";
$in=array(11=>array(15,30),15=>array(18,20),30=>array(41,49,70));
echo "<pre>";
print_r($in);
echo "</pre>";
function fn_tree($parent_id, $level,$dt,$in) {
if(is_null($parent_id)){
$parent_id ="NULL";
}
if (isset($in[$parent_id])) {
foreach ($in[$parent_id] as $id) {
$pk=$in[$parent_id];
$arrEnd[$id]=str_repeat("-", $level*2) .$dt[$id]["name"];
fn_tree($id, $level + 1,$dt,$in,$arrEnd);
}
}
return $arrEnd;
}
$arrEcho = fn_tree(11, 0, $dt, $in);
echo "<br>";
echo "result";
echo "<br>";
echo "<pre>";
print_r($arrEcho);
echo "</pre>";
$desired = array(
15=>"food",
18=>"food1",
20=>"food2",
30=>"car",
41=>"car1",
49=>"car2",
70=>"car3"
);
echo "<br>";
echo "desired";
echo "<br>";
echo "<pre>";
print_r($desired);
echo "</pre>";
Так почему же функция утрачивает подклассы?
Выход:
Array data
(
[41] => Array
(
[pk] => 41
[parentPk] => 30
[name] => car1
)
[15] => Array
(
[pk] => 15
[parentPk] => 11
[name] => food
)
[70] => Array
(
[pk] => 70
[parentPk] => 30
[name] => car3
)
[18] => Array
(
[pk] => 18
[parentPk] => 15
[name] => food1
)
[49] => Array
(
[pk] => 49
[parentPk] => 30
[name] => car2
)
[20] => Array
(
[pk] => 20
[parentPk] => 15
[name] => food2
)
[30] => Array
(
[pk] => 30
[parentPk] => 11
[name] => car
)
)
Array relationship
(
[11] => Array
(
[0] => 15
[1] => 30
)
[15] => Array
(
[0] => 18
[1] => 20
)
[30] => Array
(
[0] => 41
[1] => 49
[2] => 70
)
)
result
Array
(
[15] => food
[30] => car
)
desired
Array
(
[15] => food
[18] => food1
[20] => food2
[30] => car
[41] => car1
[49] => car2
[70] => car3
)
Привет, bfd, я пробовал объявить перед функцией, но это не сработало. И да, он должен иметь 2 строки для каждой подкатегории. – zwitterion
На самом деле, если я объявляю 'global $ dt, $ in, $ arrEnd;' внутри функции он будет работать, я не знаю, почему. – zwitterion