在php中排序依赖的子数组

San*_*jay 6 php arrays sorting

我想基于子值对数组进行排序,我希望父子数组在第一个位置然后是它的子进程然后是它的子进程等等...基于它的"父"值这里是我的示例数组,

$array= Array( 
            Array("self"=>"user4", "parent"=>"user6"),
            Array("self"=>"user2", "parent"=>"user1"),
            Array("self"=>"user1", "parent"=>"user4"),
            Array("self"=>"user5", "parent"=>"user2"),
            Array("self"=>"user6", "parent"=>"user3"),
            Array("self"=>"user3", "parent"=>"Parent") // it will be anything
        );
Run Code Online (Sandbox Code Playgroud)

这个数组应该如下排序

Array(
[0] => Array
    (
        [self] => user3
        [parent] => Parent
    )

[1] => Array
    (
        [self] => user6
        [parent] => user3
    )

[2] => Array
    (
        [self] => user4
        [parent] => user6
    )

[3] => Array
    (
        [self] => user1
        [parent] => user4
    )

[4] => Array
    (
        [self] => user2
        [parent] => user1
    )

[5] => Array
    (
        [self] => user5
        [parent] => user2
    ))
Run Code Online (Sandbox Code Playgroud)

raj*_*der 3

您可以通过以下方式使用它:

$array= Array( 
            Array("self"=>"user4", "parent"=>"user6"),
            Array("self"=>"user2", "parent"=>"user1"),
            Array("self"=>"user1", "parent"=>"user4"),
            Array("self"=>"user5", "parent"=>"user2"),
            Array("self"=>"user6", "parent"=>"user3"),
            Array("self"=>"user3", "parent"=>"Parent") // it will be anything
        );
$result = "";
foreach($array as $val)
{
    if($val['parent']== 'Parent')
    {
        $result[] = $val;
        getNextNode($val['self']);
    }
}
function getNextNode($child)
{
    global $array;
    global $result;
    foreach($array as $val)
    {
        if($val['parent'] == $child)
        {
            $result[] = $val;
            getNextNode($val['self']);
        }
    }
}
echo "<pre/>";
print_r($result);
Run Code Online (Sandbox Code Playgroud)

您得到了想要的结果。