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.