2013-08-12 48 views
0

我有像下面PHP数组分组值

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))。我怎么能循环数组

+0

这是什么意思'count1','count2'? –

+0

只是一个关键。对于上述问题,我只需要像Array(2,2,1,2)这样的数组。 A,B,C的出现次数和A再次出现的次数 –

回答

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

如果您需要在数组中值的频率,对于调用 array_count_values($阵列)PHP函数。

在您的例子的情况下,

$数据=阵列(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 )

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