PHP数组迭代逻辑的问题

时间:2011-12-15 22:11:13

标签: php arrays logic

这种情况下所需的逻辑可能很简单,但我无法理解。所以,我正在寻求帮助。

在查询之后,我得到一个看起来有点像这样的数组:

Array=>
     [0]=>
         ['name'] = item1
         ['id'] = 1
         ['parent_id'] = 0
     [1]=>
         ['name'] = item2
         ['id'] = 2
         ['parent_id'] = 1
     [2]=>
         ['name'] = item3
         ['id'] = 3
         ['parent_id'] = 5

现在,我需要为此列表中的每个项目创建路径。对于第1项,路径类似于:/item1,对于第2项,路径类似于/item1/item2

注意:项目不一定是有序的。父项可能会在它的孩子之后......

所以,基本上,我需要一个循环(可能超过1),当它遇到一个项目时,它会记下以斜杠开头的项目名称。然后,它查看parent_id并写下以{斜杠开头的parent_id名称。

然后它查看父级parent_id并写下该名称前面的斜杠。它会继续执行此操作,直到它遇到parent_id为0.此时,它会为数组赋值,所以像paths['item2'] = "/item1/item2"这样的东西会移动到下一个id并重复!

感谢您的帮助,祝您有个美好的一天!

编辑:修正了item3的id,所有项目都有不同的id。 我被要求改进这个问题: 最终的输出数组应该看起来像这样:

Array=>
     ["item1"]="/item1"
     ["item2"]="/item1/item2"
     ["item3"]="/item5/item3"    

最终输出将是一个html选择表单,每个项目都是一个选项,我需要以某种方式关联它的路径,要么是隐藏字段,要么只是通过Ajax或其他东西。

编辑:我修复了问题。我只是觉得我会在这里写出解决方案,万一其他人偶然发现了这个问题。 注意:仍然不确定它是如何工作的,但它确实有效!可能效率低下,我不知道。

function getCollPath($proj_list, $length){
$total_path = "";
$paths = array();
for ($j = 0; $j < $length + 1; $j++){
    if (isset($proj_list[$j])){
        $id = $j;
        $name = $proj_list[$j]['name'];
        $total_path = getItemPath($proj_list, $id, NULL);
        $paths[$name] = $total_path;
    }
}
return $paths;
}     

function getItemPath($proj_list, $current_id, $path){

$current_parent_id = $proj_list[$current_id]['parent_id'];
$current_name = $proj_list[$current_id]['name'];
$current_path = "/".$current_name;
if ($current_parent_id == 0){
      if (isset($path)){
        return $current_path.$path;
      }
      else{
        return $current_path;
      }
}
else{
    if (!isset($path)){
        $path = $current_path;
    }
    return getItemPath($proj_list, $current_parent_id, $path);
}
}

1 个答案:

答案 0 :(得分:1)

递归函数。它寻找具有id = child.parent_id的数组元素。然后它以当前parent_id作为参数调用self,直到达到parent_id =“”或“0”的元素。它应该将 breadcrumb 的一部分返回到父调用,因此原始调用将获得整个路径