PHP获取数组键根


PHP get array key root

我得到了以下结构:

Array
(
    [0] => Array
        (
            [id] => 1
            [children] => Array
                (
                    [0] => Array
                        (
                            [id] => 5
                        )
                    [1] => Array
                        (
                            [id] => 7
                        )
                    [2] => Array
                        (
                            [id] => 8
                            [children] => Array
                                (
                                    [0] => Array
                                        (
                                            [id] => 10
                                        )
                                    [1] => Array
                                        (
                                            [id] => 4
                                        )
                                )
                        )
                    [3] => Array
                        (
                            [id] => 6
                        )
                    [4] => Array
                        (
                            [id] => 3
                        )
                    [5] => Array
                        (
                            [id] => 2
                        )
                    [6] => Array
                        (
                            [id] => 9
                        )
                )
        )
    [1] => Array
        (
            [id] => 13
        )
)

我想知道的是键的根结构。换句话说,

我们的身份证号码是10号。我至少想知道它的根结构。这就是我对它的描述)

结果应该是:

$result = array(
                    0   =>  1,
                    1   =>  8
                );

但我不知道如何实现这一点。也不知道如何开始。我唯一能想到的就是创建几个子数组,其中包含所有子数组,然后再次运行数组并检查ID是否可用。但是在复杂结构的情况下。在速度方面,这几乎是不可行的。

我希望任何人都知道解决这个问题的办法。

这篇文章很好,因为人们认为它太简单了。但我仍在寻找答案。递归函数对我不起作用

///########-------------------------------------------------------------
///########-------------------------------------------------------------
///######## FUNCTION TO GET THE PAGE ORDER
///########-------------------------------------------------------------
///########-------------------------------------------------------------
private function GetPageLocation($PageArray, $PreFix = array()){
    ///######## RETURN THE COLLECTED DATA
    foreach($PageArray as $key => $value){
        ///######## IF THE PAGE HAS BEEN SET
        if(isset($value['id']) === true){
            echo PHP_EOL.$value['id'];
            ///######## IF THE ID IS NOT THE CURRENT ID
            if($value['id'] != $this->PageID){
                ///######## ADD THE PREFIX
                $PreFix[] = $value['id'];
            }
            ///######## IF THE ID IS THE CURRENT ID
            else{
                exit('sdd');
                ///######## HALT THE LOOP
                break;
            }
        }
        ///######## IF THE VALUE IS AN ARRAY
        if(isset($value['children']) === true){
            ///######## EXECUTE HIMSELF
            $PreFix = array_merge($PreFix, $this->GetPageLocation($value, $PreFix));
        }
        ///######## IF THE VALUE IS NO ARRAY
        else{
        }
    }
    ///########==================================================
    ///######## RETURN THE PREFIX
    ///########==================================================
    return($PreFix);
    ///########==================================================
}

一个简单的递归解:

<?php
// your array:
$arr = array(
    array(
        'id' => 1,
        'children' => array(
            array( 'id' => 5 ),
            array( 'id' => 7 ),
            array( 'id' => 8,
                   'children' => array(
                        array( 'id' => 10),
                        array( 'id' => 4 )
                    )
            ),
            array( 'id' => 6 ),
            array( 'id' => 3 ),
            array( 'id' => 2 ),
            array( 'id' => 9 )
        )
    ),
    array( 'id' => 13 )
);
// The recursive function which finds the path to the element having the specified $id
// through the $out parameter in the specified $arr.
function path_to_element($arr, $id, &$out) {
    foreach($arr as $el) {
        if($el['id']==$id) return true;
        else if(isset($el['children']) && is_array($el['children'])) {
            $out[] = $el['id'];
            if(path_to_element($el['children'], $id, $out)!==true) 
                array_pop($out);
            else return true;
        }
    }
    return false;
}
$out = array(); // The array will be filled with the path to the element
echo '<pre>';
path_to_element($arr, 10, $out);
print_r($out);
?>

输出将是:

Array
(
    [0] => 1
    [1] => 8
)