Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 按相同的顺序对数组中的连续重复元素进行计数_Php_Arrays_Counting - Fatal编程技术网

Php 按相同的顺序对数组中的连续重复元素进行计数

Php 按相同的顺序对数组中的连续重复元素进行计数,php,arrays,counting,Php,Arrays,Counting,我需要对数组中的连续重复元素进行计数,但如果它们是非连续的,我也要对它们进行计数,使它们的顺序与它们相同 例如,我有流动数组: $array = Array('a', 'b', 'a', 'a', 'a', 'c', 'c', 'b', 'b', 'a', 'a', 'a', 'a'); 如果我使用数组\计数\值函数 例如: 输出将是: Array ( [a] => 8 [b] => 3 [c] => 2 ) 但我需要得到如下输出: element counted va

我需要对数组中的连续重复元素进行计数,但如果它们是非连续的,我也要对它们进行计数,使它们的顺序与它们相同

例如,我有流动数组:

$array = Array('a', 'b', 'a', 'a', 'a', 'c', 'c', 'b', 'b', 'a', 'a', 'a', 'a');
如果我使用数组\计数\值函数 例如:

输出将是:

Array ( [a] => 8 [b] => 3 [c] => 2 )
但我需要得到如下输出:

element   counted value
    a       1
    b       1
    a       3
    c       2
    b       2
    a       4

您可以迭代数组,在值相同时计数,在值不同时将值推送到结果数组:

$result = [];
$count = 0;
$current = $array[0];
for ($i = 0; $i < count($array); $i++) {
    if ($array[$i] == $current) {
        $count++;
    }
    else {
        $result[] = array($current, $count);
        $count = 1;
    }
    $current = $array[$i];
}
$result[] = array($current, $count);
print_r($result);

从一个数组开始,第一项来自源,计数为1,然后从第二项开始,检查它是否与当前输出中的项匹配。如果匹配则添加1,如果不匹配则添加新条目

$array = Array ('a','b','a','a','a','c','c','b','b','a','a','a','a');
$output = [ ["element" => $array[0], "count" => 1 ] ];
$outputPoint = 0;
for ( $i = 1, $count = count($array); $i < $count; $i++ )   {
    if ( $array[$i] == $output[$outputPoint]["element"] )  {
        $output[$outputPoint]["count"]++;
    }
    else    {
        $output[++$outputPoint] = ["element" => $array[$i], "count" => 1 ];
    }
}
print_r($output);

这将在数组中循环并以$count为单位递增元素数

该数组看起来像:

Array
(
    [0] => Array
        (
            [element] => a
            [counted_value] => 1
        )

    [1] => Array
        (
            [element] => b
            [counted_value] => 1
        )

    [2] => Array
        (
            [element] => a
            [counted_value] => 3
        )

    [3] => Array
        (
            [element] => c
            [counted_value] => 2
        )

    [4] => Array
        (
            [element] => b
            [counted_value] => 2
        )

    [5] => Array
        (
            [element] => a
            [counted_value] => 4
        )

)

你需要使用循环。到目前为止,你有没有尝试过什么?非常非常类似于这个答案的是缺少教育性的解释。在这个看似未经测试的片段中有一个打字错误。此外,in_数组是在php中检查数组值的性能最低的方法之一。
$array = Array ('a','b','a','a','a','c','c','b','b','a','a','a','a');
$output = [ ["element" => $array[0], "count" => 1 ] ];
$outputPoint = 0;
for ( $i = 1, $count = count($array); $i < $count; $i++ )   {
    if ( $array[$i] == $output[$outputPoint]["element"] )  {
        $output[$outputPoint]["count"]++;
    }
    else    {
        $output[++$outputPoint] = ["element" => $array[$i], "count" => 1 ];
    }
}
print_r($output);
Array
(
    [0] => Array
        (
            [element] => a
            [count] => 1
        )

    [1] => Array
        (
            [element] => b
            [count] => 1
        )

    [2] => Array
        (
            [element] => a
            [count] => 3
        )

    [3] => Array
        (
            [element] => c
            [count] => 2
        )

    [4] => Array
        (
            [element] => b
            [count] => 2
        )

    [5] => Array
        (
            [element] => a
            [count] => 4
        )

)
$array = ['a','b','a','a','a','c','c','b','b','a','a','a','a'];

$count = [];
$crt   = -1;
foreach($array ?? [] as $element) {
    if($crt == -1 || $count[$crt]["element"] != $element) {
        $count[++$crt] = ["element" => $element, "counted_value" => 1];
    } else {
        $count[$crt]["counted_value"]++; 
    }
}
Array
(
    [0] => Array
        (
            [element] => a
            [counted_value] => 1
        )

    [1] => Array
        (
            [element] => b
            [counted_value] => 1
        )

    [2] => Array
        (
            [element] => a
            [counted_value] => 3
        )

    [3] => Array
        (
            [element] => c
            [counted_value] => 2
        )

    [4] => Array
        (
            [element] => b
            [counted_value] => 2
        )

    [5] => Array
        (
            [element] => a
            [counted_value] => 4
        )

)
$out = array();
$cnt = -1;
foreach($array as $val)
{
   if(in_array($val,$out))
   {
        $out[] = $var;
        $finalArr[$cnt]['cnt'] = count($out);
   }else{
        $out = array();
        $out[] = $val;
        $finalArr[] = array('ele'=>$val,'cnt'=>count($out));
        $cnt++;
   }
}
print_r($finalArr);