我有一个数组,$arrayName = array(1,2,1,3,4,3,2,5);
。我希望结果为:
Array (
[1] => 2
[2] => 2
[3] => 2
[4] => 1
[5] => 1
)
不使用array_count_values()
,array_count_values()
背后的逻辑是什么?
答案 0 :(得分:3)
与此处发布的其他方法相比,此方法仅循环每个值一次 我没有循环整个数组,而是获得了唯一的值,并使用array_keys和count来计算它们。
$arrayName = array(1,2,1,3,4,3,2,5);
$values = array_unique($arrayName);
Foreach($values as $val){
$count[$val] = count(array_keys($arrayName, $val));
}
Var_dump($count);
在你的例子中,我认为我的方法实际上可能比循环整个数组慢,但如果这是一个大型数组,那么可能有一个好处就是没有循环整个数组。
答案 1 :(得分:0)
最好的解决方案是使用array_count_values函数。这会计算数组中值的频率。 见这 - http://php.net/manual/en/function.array-count-values.php
<?php
$array = array(1, "hello", 1, "world", "hello");
print_r(array_count_values($array));
?>
Array
(
[1] => 2
[hello] => 2
[world] => 1
)
但是,如果您不想使用该功能,则可以采用丑陋的for循环方式。
$arrayName = array(1,2,1,3,4,3,2,5);
$resultArray = array();
foreach($arrayName as $value) {
$resultArray[$value] = isset($resultArray[$value]) ? $resultArray[$value] + 1 : 1;
}
print_r($resultArray); // Array ( [1] => 2 [2] => 2 [3] => 2 [4] => 1 [5] => 1 )
答案 2 :(得分:-1)