为了账号安全,请及时绑定邮箱和手机立即绑定

检查嵌套数组的 in_array

检查嵌套数组的 in_array

PHP
慕少森 2021-12-03 19:17:42
我有一个这种格式的数组,我想从任何键检查数组中是否有一个 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)但它没有选择嵌套的值有没有办法做到这一点?
查看完整描述

2 回答

?
动漫人物

TA贡献1815条经验 获得超10个赞

没有现成的功能可以做到这一点。假设你有:


$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));


查看完整回答
反对 回复 2021-12-03
?
临摹微笑

TA贡献1982条经验 获得超2个赞

既然你说值在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"))){

这将首先查看帐户设置中的所有链接项,然后切出帐户设置并查看链接项的其他两个子数组。


查看完整回答
反对 回复 2021-12-03
  • 2 回答
  • 0 关注
  • 202 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信