检查嵌套数组的 in_array

我有一个这种格式的数组,我想从任何键检查数组中是否有一个 var link


    $nav = array(

        'Account Settings' => array(

            'icon' => 'fa-cog',

            'Account Settings' => array(

                'link' => '/voip/settings?seq='.$seq,

                'icon' => 'fa-cog',

            ),

            'Provisioning' => array(

                'link' => '/voip/provisioning?seq='.$seq,

                'icon' => 'fa-wrench',

            ),

            'E999 Data' => array(

                'link' => '/voip/e999?seq='.$seq,

                'icon' => 'fa-life-ring',

            ),

            'Delete Account' => array(

                'link' => '/voip/delete?seq='.$seq,

                'icon' => 'fa-trash',

            ),

        ),

        'Mailboxes' => array(

            'link' => '/voip/mailboxes?seq='.$seq,

            'icon' => 'fa-envelope',

        ),

        'Telephone Numbers' => array(

            'link' => '/voip/numbers?seq='.$seq,

            'icon' => 'fa-hashtag',

        ),

    );

我试过了,if(in_array($_GET["nav"], $nav)但它没有选择嵌套的值


有没有办法做到这一点?


慕少森
浏览 203回答 2
2回答

动漫人物

没有现成的功能可以做到这一点。假设你有:$key = 'link';$value = '/voip/e999?seq=' . $seq;// and $nav your multidimensionnal array您可以编写自己的递归函数:function contains_key_value_multi($arr, $key, $value) {    foreach ($arr as $k => $v) {        if ( is_array($v) && contains_key_value_multi($v, $key, $value) ||             $k === $key && $v === $value )            return true;    }    return false;}var_dump(contains_key_value_multi($nav, $key, $value));您可以使用spl 类来遍历多维数组的叶子。这次你不需要递归函数:$ri = new RecursiveIteratorIterator(new RecursiveArrayIterator($nav));function contains_key_value($arr, $key, $value) {    foreach ($arr as $k => $v) {        if ( $k === $key && $v === $value )             return true;    }    return false;}var_dump(contains_key_value($ri, $key, $value));

临摹微笑

既然你说值在link键中,那么你可以使用 array_column 来隔离link项目。if(in_array($_GET["nav"], array_column($nav['Account Settings'], "link")) || in_array($_GET["nav"], array_column(array_slice($nav, 1), "link"))){这将首先查看帐户设置中的所有链接项,然后切出帐户设置并查看链接项的其他两个子数组。
打开App,查看更多内容
随时随地看视频慕课网APP