如何从嵌套关联数组中获取符合条件的父数组键(非索引)
如何通过子数组的值获取父数组的键名?
我的数组如下:
$array = [ 'key1' => [ 'first' => 'azerty', 'second' => 'qwerty' ], 'key2' => [ 'first' => 'hello', 'second' => 'world' ] ];
我希望通过值qwerty获取对应的父数组键key1。我尝试了这段代码:
$theKeyIWant = array_search('qwerty', array_column($array, 'second'));
但得到的结果是0而非key1,请问怎么修改代码或者有没有其他方法拿到目标键值?
方法一:保留原键名的array_column用法
array_column默认会丢弃原数组的键名,给它传入第三个参数指定保留原键名,就能让array_search返回对应的父键:
$theKeyIWant = array_search('qwerty', array_column($array, 'second', 'key'));
这里第三个参数'key'表示把原数组的键名作为新数组的键,新数组的值是每个子数组的second字段,搜索后直接返回原父键key1。
方法二:遍历数组查找
逻辑直观,适合需要额外判断条件的场景:
$targetValue = 'qwerty'; $theKeyIWant = null; foreach ($array as $key => $item) { if ($item['second'] === $targetValue) { $theKeyIWant = $key; break; // 找到后立即退出循环提升效率 } }
方法三:array_filter配合array_keys
先过滤出符合条件的子数组,再提取对应的键名:
$filtered = array_filter($array, function($item) { return $item['second'] === 'qwerty'; }); $theKeyIWant = array_keys($filtered)[0] ?? null;
如果存在多个匹配值,array_keys会返回所有对应父键,这里取第一个匹配结果,?? null用于处理无匹配的情况。
内容的提问来源于stack exchange,提问作者Kozame
相关产品推荐
相关产品推荐

