检查in_array中的嵌套数组

时间:2019-08-24 16:12:11

标签: php

我有一个采用这种格式的数组,我想通过任何键link

检查数组中是否有var。
    $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 个答案:

答案 0 :(得分:0)

由于您说的是1键中的值,因此可以使用array_column隔离1项。

link

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

在这里进行测试:
https://3v4l.org/pP2Nk

答案 1 :(得分:0)

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

$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 classes来遍历多维数组的叶子。这次您不需要递归函数:

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