递归PHP函数返回意外数组
我有一个层次数据,我把它放在一个数组中,我称之为$dt。然后我有一个数组来存储我调用$in的这些数据之间的关系。我创建了一个函数,它的参数是初始索引、级别、数组$dt和数组$in。我正在调试这个函数,但是我不知道为什么子类在这个过程中丢失了。完整的代码是:递归PHP函数返回意外数组,php,arrays,recursion,Php,Arrays,Recursion,我有一个层次数据,我把它放在一个数组中,我称之为$dt。然后我有一个数组来存储我调用$in的这些数据之间的关系。我创建了一个函数,它的参数是初始索引、级别、数组$dt和数组$in。我正在调试这个函数,但是我不知道为什么子类在这个过程中丢失了。完整的代码是: $dt = array( 41=>array( "pk"=>41,"parentPk"=>30,"name"=>"car1"), 15=>array("pk"=>15,"parentPk"=>
$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>";
问题的线索是/应该是“Undefined variable:arrEnd”。如果您没有在可以看到此警告的环境中运行,则应该尝试设置这样的环境。如果您在这样的环境中运行,您应该密切注意此警告和所有其他警告 我不确定这里的惯例是仅仅给出一个线索还是一个完整的答案,但继续给出一个相当完整的答案:似乎您打算通过引用传递arrEnd,但根本没有传递 另外,我对您想要的输出有点困惑。事实上,你难道不想要一些用双破折号表示层次结构的东西吗,如下所示
嗨,bfd,我在函数之前尝试过声明,但这不起作用。是的,每个子类别应该有2行代码>在函数内部它会工作,我不知道为什么。
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
)
Array
(
[15] => food
[18] => --food1
[20] => --food2
[30] => car
[41] => --car1
[49] => --car2
[70] => --car3
)