Javascript 如何将这个JS函数重写为PHP

Javascript 如何将这个JS函数重写为PHP,javascript,php,function,Javascript,Php,Function,我试图将这个JS函数重写为PHP,但它不起作用。 我不知道怎么做。有人能帮忙吗 var node={“item”:1,“children”:[{“item”:2,“children”:[{“item”:3,“children”:[{“item”:4,“children”:[},{“item”:5,“children”:[]},{“item”:6,“children”:[{“item”:7,“children”:[]},{“item”:8,“children”:[]},{“item”:9,“ch

我试图将这个JS函数重写为PHP,但它不起作用。 我不知道怎么做。有人能帮忙吗

var node={“item”:1,“children”:[{“item”:2,“children”:[{“item”:3,“children”:[{“item”:4,“children”:[},{“item”:5,“children”:[]},{“item”:6,“children”:[{“item”:7,“children”:[]},{“item”:8,“children”:[]},{“item”:9,“children”:[]}],{“item”:10,“children,“子项”:[]}]}]}]}
函数遍历(节点,路径=[],结果=[]){
if(!node.children.length)
push(path.concat(node.item));
for(node.children的常量子节点)
遍历(子对象、路径、concat(节点、项)、结果);
返回结果;
}

console.log(遍历(节点));
函数的问题是
array\u merge
需要两个数组,第一个参数确实是array,但第二个参数是number(
$node['id']
是number)。将
$node['id']
括在数组括号([and])中,然后合并两个数组

以下是固定版本:

<?php

$node = json_decode('{"id":1,"children":[{"id":2,"children":[{"id":3,"children":[{"id":4,"children":[]},{"id":5,"children":[]},{"id":6,"children":[{"id":7,"children":[]},{"id":8,"children":[]},{"id":9,"children":[]}]}]},{"id":10,"children":[{"id":11,"children":[]},{"id":12,"children":[{"id":13,"children":[]},{"id":14,"children":[]}]}]}]}]}',true);


 function traverse($node, $path = [], $result = []){
     $path[] = $node['id'];
     
     if(!count($node["children"])) {
        $result[] = $path;
     }
     
     foreach($node['children'] as $child) {
         $results = traverse($child, array_merge($path,[$node['id']]), $result);
         $result = array_merge($result, $results);
     }
     
     return $result;
 }
 
print_r(traverse($node));

array\u merge
需要数组作为参数,但
$node['id']
是一个数字,而不是数组。您可以使用
array\u merge($path,[$node['id']])
将数字添加到数组中

JavaScript按值传递引用。对于可变对象,只要不重新分配引用,这类似于按引用调用。在PHP中,参数按值作为对象的副本传递。必须按引用传递

function traverse($node, $path = [], &$result = [])
要复制行为,请执行以下操作:

<?php

$node = json_decode('{"id":1,"children":[{"id":2,"children":[{"id":3,"children":[{"id":4,"children":[]},{"id":5,"children":[]},{"id":6,"children":[{"id":7,"children":[]},{"id":8,"children":[]},{"id":9,"children":[]}]}]},{"id":10,"children":[{"id":11,"children":[]},{"id":12,"children":[{"id":13,"children":[]},{"id":14,"children":[]}]}]}]}]}',true);


function traverse($node, $path = [], &$result = []){
    if(!count($node["children"]))
        $result[] = array_merge($path,[$node['id']]);
    foreach($node['children'] as $child)
        traverse($child, array_merge($path,[$node['id']]), $result);
    return $result;
}
 
print_r(traverse($node));

什么不起作用?你有什么错误吗?当前的输入和输出是什么?你想要的输出是什么?我编辑了它,现在@evolutionxboxThis有助于处理错误,但返回空数组如果你想用这个函数做什么,我需要遍历树结构并获得节点的每个路径,就像你可以运行的示例中一样,我需要它用于自动分类操作