我有一个关联数组,其中每个值都是一个数字列表,如下所示:
$a['i']=[111, 333];
给定值333
,如何找到密钥i
。也就是说,包含333
的列表的键。
答案 0 :(得分:5)
如果主数组中的值是简单类型 - 数字,字符串等 - 您可能希望使用array_search
来查找关联的键。在您的情况下,每个元素的值是另一个数组,因此您必须显式遍历每个元素并在结果数组中搜索您的值。这样的事情可以解决问题:
function get_key_from_value(array $arr, $needle)
{
foreach ($arr as $key => $value)
if (in_array($needle, $value, true))
return $key;
return null;
}
你会这样称呼它:
echo get_key_from_value($a, 333);
更新:评论中提到这不是一个通用的解决方案,因此我实施了以下版本:
function array_search_recursive($needle, array $haystack, $strict = false)
{
foreach ($haystack as $key => $value) {
if (is_array($value)) {
if (!is_null(array_search_recursive($needle, $value, $strict))) {
return $key;
}
} else {
if ($strict && $value === $needle) {
return $key;
} else if (!$strict && $value == $needle) {
return $key;
}
}
}
return null;
}
可以像这样调用(参数的顺序基于array_search
):
echo array_search_recursive(333, $a);