如何分组数组并计算它们

Jeg*_*gus 8 php arrays

我有这样的数组

$arr = array(1,1,1,2,2,3,3,1,1,2,2,3);
Run Code Online (Sandbox Code Playgroud)

我发现了一个功能array_count_values.但它会将所有相同的值组合在一起并对它们进行计数并打破序列.

$result[1] = 5
$result[2] = 4
$result[3] = 3
Run Code Online (Sandbox Code Playgroud)

如何创建将遵循序列的count数组.我真正想要的结果是:

[1] = 3;
[2] = 2;
[3] = 2;
[2] = 2;
[3] = 1;
Run Code Online (Sandbox Code Playgroud)

Mer*_*ede 23

PHP的array_count_values函数怎么样?

<?php
$array = array(1, "hello", 1, "world", "hello");
print_r(array_count_values($array));
?>
Run Code Online (Sandbox Code Playgroud)

输出:

Array
(
    [1] => 2
    [hello] => 2
    [world] => 1
)
Run Code Online (Sandbox Code Playgroud)

  • 我不知道为什么这么多人赞成这个错误的答案。为了旋转我的措辞,这是另一个问题的正确答案。 (6认同)
  • 只是最好的方式,远远超过公认的答案 (4认同)
  • 这个答案的问题在于它忽略了问题中的**连续**要求。这会计算**所有**值,无论位置如何。当您使用问题中的数组运行此函数时[您没有得到所需的结果](https://3v4l.org/IcfbH) (4认同)

zer*_*kms 16

可以简单地手动完成:

$arr = array(1,1,1,2,2,3,3,1,1,2,2,3);

$result = array();
$prev_value = array('value' => null, 'amount' => null);

foreach ($arr as $val) {
    if ($prev_value['value'] != $val) {
        unset($prev_value);
        $prev_value = array('value' => $val, 'amount' => 0);
        $result[] =& $prev_value;
    }

    $prev_value['amount']++;
}

var_dump($result);
Run Code Online (Sandbox Code Playgroud)