Zlicza ilość wystąpień tych samych elementów w tablicy.
array_count_values ( array $wejście )
Zwraca tablicę zawierającą wartości tablicy $wejście jako klucze i częstość ich występowania w tablicy wejście jako wartości.
<?php $tablica = array (1, "witaj", 1, "ziemia", "witaj", "witaj"); print_r(array_count_values ($tablica)); ?>
Array ( [1] => 2 [witaj] => 3 [ziemia] => 1 )
Jedynki są dwie, witaj są trzy elementy tablicy, a ziemia jest tylko jedna ;-)
<?php $ar = array('J. Karjalainen', 'J. Karjalainen', 60, '60', 'J. Karjalainen', 'j. karjalainen', 'Fastway', 'FASTWAY', 'Fastway', 'fastway', 'YUP'); $ar = array_count_values($ar); ?>
Array ( [J. Karjalainen] => 3 [60] => 2 [j. karjalainen] => 1 [Fastway] => 2 [FASTWAY] => 1 [fastway] => 1 [YUP] => 1 )
Gdy trzeba pominąć wielkość znaków w elementach tablicy i je policzyć, po ile ich jest w tej tablicy:
<?php $ar = array('J. Karjalainen', 'J. Karjalainen', 60, '60', 'J. Karjalainen', 'j. karjalainen', 'Fastway', 'FASTWAY', 'Fastway', 'fastway', 'YUP'); $ar = array_count_values(array_map('strtolower', $ar)); ?>
Array ( [j. karjalainen] => 4 [60] => 2 [fastway] => 4 [yup] => 1 )
Inne rozwiązanie powyższego:
$ar = array('J. Karjalainen', 'J. Karjalainen', 60, '60', 'J. Karjalainen', 'j. karjalainen', 'Fastway', 'FASTWAY', 'Fastway', 'fastway', 'YUP'); $ar = array_count_values_ci($ar); print_r($ar); function array_count_values_ci($array) { $newArray = array(); foreach ($array as $values) { if (!array_key_exists(strtolower($values), $newArray)) { $newArray[strtolower($values)] = 0; } $newArray[strtolower($values)] += 1; } return $newArray; }
Array ( [j. karjalainen] => 4 [60] => 2 [fastway] => 4 [yup] => 1 )
Tablica nie jest czyszczona i są dodawane do niej kolejne elementy:
<?php $ar1[] = array("red","green","yellow","blue"); $ar1[] = array("green","yellow","brown","red","white","yellow"); $ar1[] = array("red","green","brown","blue","black","yellow"); #$ar1= array("red","green","brown","blue","black","red","green"); // Possible with one or multiple Array $res = array_icount_values ($ar1); print_r($res); function array_icount_values($arr,$lower=true) { $arr2=array(); if(!is_array($arr['0'])){$arr=array($arr);} foreach($arr as $k=> $v){ foreach($v as $v2){ if($lower==true) {$v2=strtolower($v2);} if(!isset($arr2[$v2])){ $arr2[$v2]=1; }else{ $arr2[$v2]++; } } } return $arr2; }
Array ( [red] => 3 [green] => 3 [yellow] => 4 [blue] => 2 [brown] => 2 [white] => 1 [black] => 1 )
Gdy do naszej tablicy trafiają rozmaicie pisane przez użytkowników te same desygnaty, a chcemy ustalić ilość ich wystąpień, można to zrobić tak:
$arr = array('Warsaw', 'Warsaw', 'Wrocław', 'Poznań', 'KrakÓw', 'waRsaw', 'Gdańsk', 'poznań', 'WROCŁAW', 'kraków', 'GDAŃSK'); $lowertoupperpolish = array( 'ą' => 'Ą', 'ć' => 'Ć', 'ę' => 'Ę', 'ł' => 'Ł', 'ń' => 'Ń', 'ó' => 'Ó', 'ś' => 'Ś', 'ż' => 'Ż', 'ź' => 'Ź', ); function lowers($n) { global $lowertoupperpolish; return strtolower(str_replace(array_values($lowertoupperpolish), array_keys($lowertoupperpolish), $n)); } $result = array_count_values(array_map('lowers', $arr)); print_r($result);
Array ( [warsaw] => 3 [wrocław] => 2 [poznań] => 2 [kraków] => 2 [gdańsk] => 2 )