php - 为嵌套数组检查 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)
了,但它没有拾取嵌套值
有没有办法做到这一点?
解决方案
没有现成的功能可以做到这一点。假设您有:
$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));
推荐阅读
- image - 使用 Graphql 和 apollo 服务器上传图像时面临问题
- php - 通过 smtp 发送的邮件未显示在邮件服务器的已发送文件夹中
- charts - 如何从 canvasjs 中的选项加载新图表?
- elasticsearch - 嵌入式弹性搜索上的查询请求删除返回错误
- python - 如何在 Dnago 中使用户名字段不区分大小写?我的实施正确吗?
- python - 包含任意位数的字节对象
- c++ - direct3d9如何过滤像素艺术的纹理
- hawtio - 我正在使用 Hawtio(2.7.1) stanalone jar 并尝试在其中添加新插件。但它显示一个错误
- javascript - Find k number of array elements having the minimum difference amongst themselves
- swift - SwiftUI:调整弹出框以适合