You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PHP 7.4如何单行查找嵌套数组值所属的数组键?

查找嵌套数组值并返回所属键的实现

常规函数实现

最直观的方式是遍历外层数组,对每个子数组检查是否包含目标值,找到后立即返回对应的外层键:

$sections = [
    'sectionOne' => [
        'foo',
        'bar',
        'hello',
    ],
    'sectionTwo' => [
        'yo',
        'heya',
    ],
];

function getSectionByValue($value) {
    global $sections;
    // 更推荐的写法是将$sections作为参数传入,避免依赖全局变量:
    // function getSectionByValue($value, array $sections) {
    foreach ($sections as $sectionKey => $items) {
        // 第三个参数true启用严格类型比较,避免"1"和1这类非预期匹配
        if (in_array($value, $items, true)) {
            return $sectionKey;
        }
    }
    // 未找到匹配值时返回null
    return null;
}

// 调用示例
echo getSectionByValue('bar'); // 输出 sectionOne
echo getSectionByValue('yo'); // 输出 sectionTwo
echo getSectionByValue('none'); // 输出 null

单行代码实现

借助PHP 7.4的箭头函数和数组函数,可以用一行代码完成逻辑:

function getSectionByValue($value) {
    global $sections;
    // 推荐将$sections作为参数传入,提升函数独立性
    return array_keys(array_filter($sections, fn($items) => in_array($value, $items, true)))[0] ?? null;
}

单行代码逻辑说明

  1. array_filter 遍历外层数组,仅保留包含目标值的子数组
  2. array_keys 提取这些子数组对应的外层键
  3. [0] ?? null 取第一个匹配的键,若没有匹配项则返回null

额外优化建议

  • 如果不同section中存在重复的value,上述实现只会返回第一个匹配的section键;若需要返回所有匹配的键,去掉[0]即可,此时函数会返回包含所有匹配键的数组。
  • 若需多次调用该函数,建议提前构建反向映射数组,后续调用直接通过键访问,效率更高:
    // 提前构建值到section的映射
    $valueToSection = [];
    foreach ($sections as $section => $items) {
        foreach ($items as $item) {
            $valueToSection[$item] = $section;
        }
    }
    
    // 后续调用直接取值
    function getSectionByValue($value) {
        global $valueToSection;
        return $valueToSection[$value] ?? null;
    }
    

内容的提问来源于stack exchange,提问作者John

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.11 15:35:28