我想首先获取具有相同值的键,然后使用最长的字符串保持键。这是到目前为止编译的代码:
<?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 [Ann] => 1 [Tommy] => 100 [Tom] => 100 )
我的预期输出:
Array ( [Anna] => 1 [Tommy] => 100)
非常感谢您的帮助。
答案 0 :(得分:4)
不一定是最优化的解决方案,但您可以使用简单的检查来编写它:
$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);
答案 1 :(得分:1)
即使接受了答案,也不确定是否发布,但我使用ksort()
和array_flip()
进行了简单的黑客攻击:
$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);
ksort()
:按键排序数组
array_flip()
:将所有键及其关联值翻转到数组