2013-04-29 6 views
1

배열의 인접 요소를 계산하는 함수를 찾고 있습니다. 여기 예 :배열의 인접한 값이 같음

Array(A,A,A,B,B,C,A,A,A,C,C…) 

기능은 반환해야합니다 :

3*A, 2*B, 1*C, 3*A, 2*C,... 

이 같은 모든 기능을 알고 계십니까?

답변

1

트릭을 수행해야합니다. 경고없이,

<? 

function arrayCountAdjacent($array) { 
    $adjacentArray = array(); 
    $lastValue = null; 
    $i = 0; 
    foreach ($array as $key => $value) { 
     if ($lastValue === null || $lastValue != $value) { 
      $i++; 
      $adjacentArray[$i] = array("value" => $value, "count" => 1); 

      $lastValue = $value; 
     } 
     else { 
      $adjacentArray[$i]["count"]++; 
     } 
    } 

    return $adjacentArray; 
} 

$array = array("A", "A", "A", "B", "B", "C", "A", "A", "A", "C"); 
var_dump(arrayCountAdjacent($array)); 

foreach(arrayCountAdjacent($array) as $result) 
{ 
    echo $result['count'] ."*". $result['value']."\n"; 
} 
+0

고마워요! 내 질문을 너무 정확하게 읽어 주셔서 감사합니다. ;-) – acab

0

주의 사항/경고없이 수행해야합니다.

$data = array("A","A","A","B","B","C","A","A","A","C"); 
foreach($data as $val){ 
    if(!isset($newarray[$val])){$newarray[$val]=0;} 
    $newarray[$val]++; 
} 
print_r($newarray); 

출력

Array ([A] => 6 [B] => 2 [C] => 2) 

또는

$data = array("A","A","A","B","B","C","A","A","A","C"); 
foreach($data as $val){ 
    if(!isset($newarray[$val])){$newarray[$val]=0;} 
    $newarray[$val]++; 
} 

foreach($newarray as $key=>$val){ 
    echo $val.'*'.$key.', '; 
} 

출력이

6*A, 2*B, 2*C, 

잘 작동합니다)

Dom

+0

음, 그것은해야한다고 생각'$ newarray [$ 발] ++'대신'의 $ key' ..이 숫자 배열입니다) .. (내가하지 않았다 (array_count_values)와 같은 함수 이름을 변경하십시오. [array_values] (http://php.net/manual/en/function.array-values.php)는 이미 PHP – dbf

+0

의 내장 함수이기 때문에 이 경우 해결되지 않으면 구문 오류가 발생합니다 (시스템 함수를 다시 선언 할 수는 없습니다). 여러 경고 및 출력을 제공합니다. Array ([0] => 1 [1] => 1 [2] => 1 [3 ] => 1 [4] => 1 [5] => 1 [6] => 1 [7] => 1 [8] => 1 [9] => 1) – nvanesch

+0

출력을 포함하여 수정되었습니다. – Dom

0
$myArray = array('A','A','A','B','B','C','A','A','A','C','C'); 

$counts = array_reduce(
    array_keys($myArray), 
    function (&$counter, $key) use ($myArray) { 
     static $last = -1; 

     if (($key > 0) && ($myArray[$key] == $myArray[$key-1])) { 
      list($char, $count) = explode('*',$counter[$last]); 
      $counter[$last] = $char . '*' . ++$count; 
     } else { 
      $counter[++$last] = $myArray[$key] . '*1'; 
     } 
     return $counter; 
    }, 
    array() 
); 

var_dump($counts); 
관련 문제