PHP数组分组值


PHP array grouping values

我有一个类似的数组

array(0=>A,1=>A,2=>B,3=>B,4=>C,5=>A,6=>A)

我的问题是,我需要对多次出现的相同值进行分组。例如,对于上面的问题,我需要一个类似数组的数组('A'=>(count1=>2,count2=>2),'B'=>(count 1=>2),'C'=>(ount1=>1))。如何循环数组

$data = array(0=>A,1=>A,2=>B,3=>B,4=>C,5=>A,6=>A);
$counters = array();
$prev = NULL;
array_walk(
    $data,
    function ($entry) use (&$prev, &$counters) {
        if ($entry !== $prev) {
            $prev = $entry;
            $counters[] = 1;
        } else {
            $counters[count($counters)-1]++;
        }
    }
);
var_dump($counters);

如果您需要数组中值的频率,则有一个php函数array_count_values($array)。

以你的例子为例,

$data=数组(0=>'A',1=>'A',2=>'B',3=>'B'、4=>'C'、5=>'A'、6=>'A');

print_r(array_count_values($data));

将输出

阵列([A] =>4[B] =>2[C] =>1)

以下是答案-

$arr=array(0=>A,1=>A,2=>B,3=>B,4=>C,5=>A,6=>A);
$count=array();$passedelement=array();$pastelement='';$n=0;$k=0;$presentflag=0;
for($i=0;$i<7;$i++){                
if($pastelement==$arr[$i]){$presentflag=1;}                 
if($presentflag==0){
$pastelement=$arr[$i];
$passedelement[$k++]=$arr[$i];
for($j=$i;$j<7;$j++){
if($arr[$i]==$arr[$j]){$count[$n]+=1;}else{break;} 
}
$n++;
}
$presentflag=0;
}
print_r($passedelement);
print_r($count);