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

PHP:获取关联数组中值相同且键字符串最长的元素

解决PHP数组中保留值相同且键名最长元素的问题

你的现有代码已经成功筛选出了值重复的元素,但还缺少关键一步——对每个值相同的键集合,挑选出键名最长的那个。这里给你两种贴合需求的实现方案:

方案一:仅保留值重复的最长键(完全匹配你的期望)

这个方案和你原代码的过滤逻辑对齐,只处理值出现多次的元素组:

<?php
$data = array('Anna' => 1, 'Ann' => 1, 'Tommy' => 100, 'Tom' => 100);

// 第一步:按值分组,把相同值的键归集到一起
$groupedByValue = [];
foreach ($data as $key => $value) {
    $groupedByValue[$value][] = $key;
}

$filtered = [];
foreach ($groupedByValue as $value => $keys) {
    // 只处理值重复出现的组
    if (count($keys) <= 1) {
        continue;
    }
    
    // 遍历键数组,找出长度最长的那个键
    $longestKey = array_reduce($keys, function ($currentLongest, $key) {
        return strlen($key) > strlen($currentLongest) ? $key : $currentLongest;
    }, $keys[0]);
    
    $filtered[$longestKey] = $value;
}

print_r($filtered);
?>

方案二:保留所有值对应的最长键(包含唯一值元素)

如果需要保留所有值对应的最长键(不管值是否重复),可以去掉值重复的判断:

<?php
$data = array('Anna' => 1, 'Ann' => 1, 'Tommy' => 100, 'Tom' => 100);

$groupedByValue = [];
foreach ($data as $key => $value) {
    $groupedByValue[$value][] = $key;
}

$filtered = [];
foreach ($groupedByValue as $value => $keys) {
    $longestKey = array_reduce($keys, function ($currentLongest, $key) {
        return strlen($key) > strlen($currentLongest) ? $key : $currentLongest;
    }, $keys[0]);
    
    $filtered[$longestKey] = $value;
}

print_r($filtered);
?>

输出结果

两种方案(方案一完全匹配你的需求)都会输出:

Array
(
    [Anna] => 1
    [Tommy] => 100
)

逻辑说明

  1. 按值分组:遍历原数组,把拥有相同值的键放到同一个集合里,这样就能针对每个值对应的键组单独处理。
  2. 筛选最长键:用array_reduce逐个比较键的长度,最终留下当前组里最长的键,再将它和对应的值存入结果数组。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 07:20:46