Notatki PHP

prywatne zapiski na kamieniu

array_change_key_case - Zmienia wielkość liter wszystkich kluczy w tablicy

array array_change_key_case ( array $array [, int $case = CASE_LOWER ] )

Zwraca tablicę ze wszystkimi kluczami tekstowymi zamienionymi na wyłącznie małe lub wyłącznie duże litery.

array_change_key_case() zmienia klucze w tablicy wejście aby były pisane tylko dużymi lub tylko małymi literami. Zmiana zależy od ostatniego opcjonalnego parametru case. Można do niego przekazać jedną z dwóch stałych: CASE_UPPER lub CASE_LOWER. Domyślną wartością jest CASE_LOWER. Indeksy liczbowe będą pozostawione takie jakie są.

 
$wejscie = array("PierWszy" => 1, "DruGi" => 4);
print_r(array_change_key_case($wejscie, CASE_UPPER);
 
Array
(
    [PIERWSZY] => 1
    [DRUGI] => 2
)

 

 
function array_change_key_case_unicode($arr, $c = CASE_LOWER) {
    $c = ($c == CASE_LOWER) ? MB_CASE_LOWER : MB_CASE_UPPER;
    foreach ($arr as $k => $v) {
        $ret[mb_convert_case($k, $c, "UTF-8")] = $v;
    }
    return $ret;
}
 
$arr = array("GołĄbek" => 1, "żDŹBło" => "podróż", "pĘdzel" => "adaŚ");
print_r(array_change_key_case($arr, CASE_UPPER));
echo '<br>';
print_r(array_change_key_case_unicode($arr, CASE_UPPER));
 
Array ( [GOłĄBEK] => 1 [żDZBłO] => podróż [PĘDZEL] => adaŚ ) 
Array ( [GOŁĄBEK] => 1 [ŻDZBŁO] => podróż [PĘDZEL] => adaŚ )

 

W każdym innym przypadku zaliczymy problem z polskimi ogonkami i zakodowaniem ich w UTF-8.

 
 
function ack_r3(&$array, $case=CASE_LOWER, $flag_rec=false)
    {
      $array = array_change_key_case($array, $case);
      if ( $flag_rec ) {
        foreach ($array as $key => $value) {
            if ( is_array($value) ) {
                ack_r3($array[$key], $case, true);
            }
        }
      }
    }
 
 
$arr = array("łUCjan" => 1, "ŹDŹBło" => "poDróż", "PĘdzel" => "AdaŚ");
 
 
 
ack_r3($arr, CASE_UPPER,true);
    var_dump($arr);
 
array(3) { ["łUCJAN"]=> int(1) ["ŹDŹBłO"]=> string(8) "poDróż" ["PĘDZEL"]=> string(5) "AdaŚ" } 

Polska litera ł jest ignorowana przy konwersji kluczy na duże litery i należy zbudować inny algorytm konwersji.