如何在不使用array_count_values()的情况下创建数组?

时间:2018-01-16 16:56:55

标签: php

我有一个数组,$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()背后的逻辑是什么?

3 个答案:

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

https://3v4l.org/EGGJq

在你的例子中,我认为我的方法实际上可能比循环整个数组慢,但如果这是一个大型数组,那么可能有一个好处就是没有循环整个数组。

答案 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)

Counting frequencies of array elements

计数数组元素的频率