PHP如何在二维数组中根据子数组name字段值查找主数组对应键名
实现方案
方案1:使用array_column + array_search(推荐,代码最简洁)
array_column可以直接提取二维数组中指定字段的值组成新的一维数组,且默认保留原数组的键名,之后直接用array_search查找对应值的键即可:
function searchKeyByName(array $array, string $searchName) { // 提取所有子数组的name字段,保留原数组键 $nameList = array_column($array, 'name'); // 严格匹配查找对应键,第三个参数true开启严格类型校验 return array_search($searchName, $nameList, true); } // 调用示例 $targetKey = searchKeyByName($yourArray, 'test3'); // 此时$targetKey的返回值为2
该方法要求PHP版本 >= 5.5。
方案2:循环遍历实现(兼容全版本,支持自定义匹配规则)
如果需要兼容更低版本PHP,或者需要自定义匹配逻辑(比如不区分大小写、模糊匹配),可以用foreach遍历实现:
/** * 根据name字段查找二维数组对应键 * @param array $array 待查询的二维数组 * @param string $searchName 要查找的name值 * @param bool $caseSensitive 是否区分大小写,默认是 * @return int|bool 找到返回对应键,未找到返回false */ function searchKeyByName(array $array, string $searchName, bool $caseSensitive = true) { foreach ($array as $key => $item) { if (!isset($item['name'])) continue; if ($caseSensitive) { if ($item['name'] === $searchName) return $key; } else { if (strcasecmp($item['name'], $searchName) === 0) return $key; } } return false; } // 调用示例 $targetKey = searchKeyByName($yourArray, 'test3'); // 不区分大小写调用示例 $targetKey = searchKeyByName($yourArray, 'Test3', false);
注意:判断是否查找成功时请用$targetKey !== false的判断方式,避免匹配到键为0的情况时和false混淆。
内容的提问来源于stack exchange,提问作者Pavvcio
相关产品推荐
相关产品推荐

