Javascript 如何将这个JS函数重写为PHP
我试图将这个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
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有助于处理错误,但返回空数组如果你想用这个函数做什么,我需要遍历树结构并获得节点的每个路径,就像你可以运行的示例中一样,我需要它用于自动分类操作