PHP数组分组值

时间:2013-08-12 10:57:51

标签: php arrays

我有一个如下所示的数组

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

我的问题是我需要将多次出现的相同值分组。例如,对于上述问题,我需要一个像数组一样的数组('A'=>(count1 => 2,count2 => 2),'B'=>(count1 => 2),'C' =>(count1 => 1))。我怎样才能循环数组

3 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:0)

如果你需要数组中的值的频率,那么有一个PHP函数被调用  array_count_values($数组)。

如果是你的例子,

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

的print_r(array_count_values($数据));

会输出

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

答案 2 :(得分:0)

这是答案 -

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