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);