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

PHP求助:根据子数组值查找父键名,array_search返回索引而非键名

解决方案:通过'en'字段值获取父数组键名

你遇到的问题确实是因为array_column()默认返回索引数组,所以array_search()只能返回数字位置,而非原数组的关联键名。这里有几种实用的解决办法,帮你拿到目标键Shared_Hosting:

方法1:利用array_column()的第三个参数(最简洁)

很多人不知道array_column()支持第三个参数,用来指定返回数组的键名。我们可以直接把原数组的父键作为新数组的键,en字段的值作为新数组的值:

$lk = array(
    'About_US' => array(
        'en' => 'about-us',
        'es' => 'sobre-nosotros',
    ),
    'Shared_Hosting' => array(
        'en' => 'website-shared-hosting',
        'es' => 'alojamiento-de-sitios',
    ),
);

// 构建「父键 => en值」的映射数组
$enToParentKey = array_column($lk, 'en', array_keys($lk));

// 直接搜索值拿到对应的父键
$targetKey = array_search('website-shared-hosting', $enToParentKey);
echo $targetKey; // 输出:Shared_Hosting

这个方法最简洁,完全利用PHP内置函数完成,性能也不错。

方法2:手动遍历数组(直观易调试)

如果数组规模不大,手动循环遍历逻辑更清晰,还能在找到匹配后立刻终止循环,提升效率:

$lk = array(/* 你的数组 */);
$targetEnValue = 'website-shared-hosting';
$resultKey = null;

foreach ($lk as $parentKey => $childArray) {
    if ($childArray['en'] === $targetEnValue) {
        $resultKey = $parentKey;
        break; // 找到目标就停止循环,不用遍历剩下的元素
    }
}

echo $resultKey; // 输出:Shared_Hosting

这种方法适合需要额外处理匹配项的场景,比如做一些条件判断或者数据转换。

方法3:array_filter() + array_keys()组合

通过array_filter()过滤出符合条件的子数组,再用array_keys()提取对应的父键:

$lk = array(/* 你的数组 */);
$targetEnValue = 'website-shared-hosting';

// 过滤出'en'值匹配的子数组
$matchingItems = array_filter($lk, function($item) use ($targetEnValue) {
    return $item['en'] === $targetEnValue;
});

// 提取过滤后的父键(如果有多个匹配,会返回所有符合的键)
$matchingKeys = array_keys($matchingItems);

// 取第一个匹配的键(如果确定只有一个结果)
echo $matchingKeys[0]; // 输出:Shared_Hosting

这个方法适合可能存在多个匹配项的场景,能一次性拿到所有符合条件的父键。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 03:41:37