【问题标题】:Issues with PHP array iteration logicPHP数组迭代逻辑的问题
【发布时间】:2011-12-15 22:11:13
【问题描述】:

这种情况下所需的逻辑可能很简单,但我想不通。所以,我正在寻求帮助。

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

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

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

注意:项目不一定按顺序排列。父项可能在其子项之后...

所以,基本上,我需要一个循环(可能不止 1 个),当它遇到一个项目时,它会写下项目名称,并在前面加上一个斜线。然后,它查看parent_id 并写下parent_id 的名称,并在前面加上一个斜线。

然后它查看父级的parent_id 并写下该名称并在前面加上一个斜线。它继续执行此操作,直到遇到 0 的 parent_id。此时,它为数组分配一个值,因此类似于 paths['item2'] = "/item1/item2" 并移动到下一个 id 并重复!

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

edit:修复了 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);
}
}

【问题讨论】:

  • 为什么item2item3 共享同一个id
  • 最终输出是什么?
  • @webbiedave 哎呀,这只是一个错字。所有的 id 都是唯一的。
  • @Jon 数组中的最终输出?这看起来像paths=>["item1"]=>"/item1",["item2"]=>"/item1/item2",["item3"]=>"/item5/item3"` 和很快。或者,您是在谈论实际显示吗?在这种情况下,我需要制作一个带有每个项目的 html select 表单作为选项,并且我需要以某种方式关联它的路径,无论是与隐藏字段还是通过 Ajax 或其他方式。
  • @zermy 好的,请在问题中发布以改进它。

标签: php arrays logic


【解决方案1】:

递归函数。它查找 id = child.parent_id 的数组元素。然后它以当前 parent_id 作为参数调用 self ,直到到达 parent_id = "" 或 "0" 的元素。它应该将 breadcrumb 的一部分返回给父调用,以便原始调用获取整个路由

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-24
    相关资源
    最近更新 更多