PHP:获取关联数组

时间:2018-05-21 09:54:59

标签: 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[$value] > 1;
});

print_r($filtered);
?>

当前输出:

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

我的预期输出:

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

非常感谢您的帮助。

2 个答案:

答案 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():将所有键及其关联值翻转到数组

Demo