我有一个采用这种格式的数组,我想通过任何键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)
,但是它没有选择嵌套的值
有没有办法做到这一点?
答案 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));