我有一个如下所示的数组
array(0=>A,1=>A,2=>B,3=>B,4=>C,5=>A,6=>A)
我的问题是我需要对多次出现的相同值进行分组。例如对于上面的问题,我需要一个像 array('A' => (count1=>2,count2=>2), 'B' => (count1=>2), 'C' => (count1= >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);
如果您需要数组中值的频率,则有一个名为 array_count_values($array) 的 php 函数。
以你的例子为例,
$data = array(0=>'A',1=>'A',2=>'B',3=>'B',4=>'C',5=>'A',6=> '一个');
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);