Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/277.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
递归PHP函数返回意外数组_Php_Arrays_Recursion - Fatal编程技术网

递归PHP函数返回意外数组

递归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。然后我有一个数组来存储我调用$in的这些数据之间的关系。我创建了一个函数,它的参数是初始索引、级别、数组$dt和数组$in。我正在调试这个函数,但是我不知道为什么子类在这个过程中丢失了。完整的代码是:

$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
)