2013-08-12 50 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);