使用特殊父级进行自定义数组排序


custom array sorting withe special parent

我对数组、有疑问

$source = array(
        array("id"=>1,"parent"=>0),
        array("id"=>2,"parent"=>6),
        array("id"=>3,"parent"=>5),
        array("id"=>4,"parent"=>6),
        array("id"=>5,"parent"=>0),
        array("id"=>6,"parent"=>8),
        array("id"=>7,"parent"=>0),
        array("id"=>8,"parent"=>10),
        array("id"=>9,"parent"=>0),
        array("id"=>10,"parent"=>0),
           );
$result = array(
        array("id"=>1,"parent"=>0),
        array("id"=>2,"parent"=>6),
        array("id"=>6,"parent"=>8),
        array("id"=>3,"parent"=>5),
        array("id"=>5,"parent"=>0),
        array("id"=>4,"parent"=>6),
        array("id"=>6,"parent"=>8),
        array("id"=>7,"parent"=>0),
        array("id"=>8,"parent"=>10),
        array("id"=>10,"parent"=>0),
        array("id"=>9,"parent"=>0),
           );

我希望源数组变成结果数组,如果数组中的项(比如id 2,我就是这个a)有一个父项不是0(实际为6),则该项(id等于6)将附加到项(id相等2),其他项也这样做,最后我们将删除项(id等价6)。。。。请帮助

$by_id = array(); //index the source array by id
//so we can find the parent quickly
foreach($source as $v) {
    $by_id[$v['id']] = $v;
}
$result = array();
foreach($source as $k => $v) {
    $result[$v['id']] = $v;
    //if the parent is 0 or has already been added
    //then move to next element
    if($v['parent'] == 0 || isset($result[$v['parent']]))
        continue;
    //otherwise add the parent
    $result[$v['parent']] = $by_id[$v['parent']];
}
$result = array_values($result);
print_r($result);

演示