배열의 인접 요소를 계산하는 함수를 찾고 있습니다. 여기 예 :배열의 인접한 값이 같음
Array(A,A,A,B,B,C,A,A,A,C,C…)
기능은 반환해야합니다 :
3*A, 2*B, 1*C, 3*A, 2*C,...
이 같은 모든 기능을 알고 계십니까?
배열의 인접 요소를 계산하는 함수를 찾고 있습니다. 여기 예 :배열의 인접한 값이 같음
Array(A,A,A,B,B,C,A,A,A,C,C…)
기능은 반환해야합니다 :
3*A, 2*B, 1*C, 3*A, 2*C,...
이 같은 모든 기능을 알고 계십니까?
트릭을 수행해야합니다. 경고없이,
<?
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";
}
주의 사항/경고없이 수행해야합니다.
$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
음, 그것은해야한다고 생각'$ newarray [$ 발] ++'대신'의 $ key' ..이 숫자 배열입니다) .. (내가하지 않았다 (array_count_values)와 같은 함수 이름을 변경하십시오. [array_values] (http://php.net/manual/en/function.array-values.php)는 이미 PHP – dbf
의 내장 함수이기 때문에 이 경우 해결되지 않으면 구문 오류가 발생합니다 (시스템 함수를 다시 선언 할 수는 없습니다). 여러 경고 및 출력을 제공합니다. Array ([0] => 1 [1] => 1 [2] => 1 [3 ] => 1 [4] => 1 [5] => 1 [6] => 1 [7] => 1 [8] => 1 [9] => 1) – nvanesch
출력을 포함하여 수정되었습니다. – Dom
$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);
고마워요! 내 질문을 너무 정확하게 읽어 주셔서 감사합니다. ;-) – acab