Notatki PHP

prywatne zapiski na kamieniu

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 
)