PHP:获取关联数组中具有最长字符串的键

PHP:获取关联数组中具有最长字符串的键,php,Php,我想首先获得具有相同值的键,然后保留具有最长字符串的键。以下是迄今为止编译的代码: <?php $data = array('Anna' => 1, 'Ann' => 1, 'Tommy' => 100, 'Tom' => 100); $total = array_count_values($data); $filtered = array_filter($data, function ($value) use ($total) { return $total[$v

我想首先获得具有相同值的键,然后保留具有最长字符串的键。以下是迄今为止编译的代码:

<?php
$data = array('Anna' => 1, 'Ann' => 1, 'Tommy' => 100, 'Tom' => 100);
$total = array_count_values($data);
$filtered = array_filter($data, function ($value) use ($total) {
return $total[$value] > 1;
});

print_r($filtered);
?>
我的预期产出:

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

非常感谢您的帮助。

不一定是最优化的解决方案,但您可以使用简单的检查来编写:

$data = array('Anna' => 1, 'Ann' => 1, 'Tommy' => 100, 'Tom' => 100, 'Dan' => 200, 'Danny' => 200);
$total = array_count_values($data);

$filtered = array_filter($data, function ($value) use ($total) {
    return $total[$value] > 1;
});

foreach($data as $key => $value) {
    $foundKey = array_search($value,$filtered);
    if($foundKey){
        if(strlen($foundKey) < strlen($key)){
            unset($filtered[$foundKey]);
        } elseif(strlen($foundKey) > strlen($key)) {
            unset($filtered[$key]);
        }
    }
}
print_r($filtered);
$data=array('Anna'=>1,'Ann'=>1,'Tommy'=>100,'Tom'=>100,'Dan'=>200,'Danny'=>200);
$total=数组\计数\值($data);
$filtered=array\u filter($data,function($value)use($total){
返回$total[$value]>1;
});
foreach($key=>$value形式的数据){
$foundKey=array\u search($value,$filtered);
如果($foundKey){
if(strlen($foundKey)strlen($key)){
未设置($filtered[$key]);
}
}
}
打印(已过滤);

即使答案被接受,也不一定要发布,但我有一个简单的技巧,使用
ksort()
array\u flip()

ksort()
:按键对数组排序

array\u flip()
:在数组中翻转所有键及其关联值


非常感谢您的解决方案!完美的非常感谢你的帮助。
$data = array('Anna' => 1, 'Ann' => 1, 'Tommy' => 100, 'Tom' => 100, 'Dan' => 200, 'Danny' => 200);
$total = array_count_values($data);

$filtered = array_filter($data, function ($value) use ($total) {
    return $total[$value] > 1;
});

foreach($data as $key => $value) {
    $foundKey = array_search($value,$filtered);
    if($foundKey){
        if(strlen($foundKey) < strlen($key)){
            unset($filtered[$foundKey]);
        } elseif(strlen($foundKey) > strlen($key)) {
            unset($filtered[$key]);
        }
    }
}
print_r($filtered);
$data = array('Anna' => 1, 'Ann' => 1, 'Tommy' => 100, 'Tom' => 100, 'Dan' => 200, 'Danny' => 200);
ksort($data);
$result=array_flip(array_flip($data));
print_r($result);