PHP从给定id的父/子数组返回所有ID

时间:2011-08-07 22:45:21

标签: php arrays recursion

在这里遇到问题,也许有人可以帮助我。几个小时的搜索无法找到解决方案,所以我的机智已经结束了。

我有一个数组,

$array = array(
array('id' => 1, 'parent_id' => 0, 'name' => 'Main'),
array('id' => 2, 'parent_id' => 0, 'name' => 'Something'),
array('id' => 3, 'parent_id' => 1, 'name' => 'Child of Main'),
array('id' => 4, 'parent_id' => 3, 'name' => 'Child of Child of Main'),
...
);

我想要一个函数,它将为我提供给定节点的父节点的所有ID,即

$ids = getIDs(4);

将返回{3,1}

的数组

有什么建议吗?提前谢谢。

3 个答案:

答案 0 :(得分:1)

是否可以制作这样的结构?

 $array = array(
1=>array('id' => 1, 'parent_id' => 0, 'name' => 'Main'),
2=>array('id' => 2, 'parent_id' => 0, 'name' => 'Something'),
3=>array('id' => 3, 'parent_id' => 1, 'name' => 'Child of Main'),
4=>array('id' => 4, 'parent_id' => 3, 'name' => 'Child of Child of Main'),
...
);

在数组

中有或没有'id'

这个应该适用于这个结构

function getIds($array,$x){
    if(!$array[$x]['parent_id'])
        return array();
    else
        return array_merge(array($array[$x]['parent_id']),getIds($array,$array[$x]['parent_id']));
}

答案 1 :(得分:1)

我做了类似于RiaD的东西(但我自己)。它适用于您已有的结构。

<?php
$array = array(
array('id' => 1, 'parent_id' => 0, 'name' => 'Main'),
array('id' => 2, 'parent_id' => 0, 'name' => 'Something'),
array('id' => 3, 'parent_id' => 1, 'name' => 'Child of Main'),
array('id' => 4, 'parent_id' => 3, 'name' => 'Child of Child of Main'),
);
$parents = array();
function getIDs($id){
    global $array, $parents;
    $tmp = $array[$id-1]['parent_id'];
    if($tmp){
        array_push($parents, $tmp);
        getIDs($tmp);
    }
}
getIDs(4);
var_dump($parents);
?>

答案 2 :(得分:-1)

您可以尝试foreach 循环或使用array_count_values