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