Jak mogę przekonwertować wszystkie wartości w tablicy na małe litery w PHP?
Coś jak array_change_key_case
?
zastosowanie array_map()
:
$yourArray = array_map('strtolower', $yourArray);
W przypadku, gdy potrzebujesz tablicy zagnieżdżonej małymi literami ( Yahya Uddin ):
$yourArray = array_map('nestedLowercase', $yourArray);
function nestedLowercase($value) {
if (is_array($value)) {
return array_map('nestedLowercase', $value);
}
return strtolower($value);
}
mb_strtolower
$yourArray = array_map('mb_strtolower', $yourArray);
Właśnie sprawdziłem i zadziałało dla cyrylicyDla kompletności: możesz również użyć
array_walk
:array_walk($yourArray, function(&$value) { $value = strtolower($value); });
Z dokumentów PHP:
Lub bezpośrednio przez
foreach
pętlę przy użyciu referencji :foreach($yourArray as &$value) $value = strtolower($value);
Zauważ, że te dwie metody zmieniają tablicę „na miejscu”, podczas gdy
array_map
tworzy i zwraca kopię tablicy, co może nie być pożądane w przypadku bardzo dużych tablic.źródło
array_walk_recursive()
. Równieżmb_strtolower()
dlatego, że świat jest wielojęzyczny.Możesz użyć array_map (), ustawić pierwszy parametr na 'strtolower' (łącznie z cudzysłowami), a drugi parametr na $ lower_case_array.
źródło
Jeśli chcesz zamienić wszystkie wartości na małe litery w tablicy zagnieżdżonej , użyj następującego kodu:
function nestedLowercase($value) { if (is_array($value)) { return array_map('nestedLowercase', $value); } return strtolower($value); }
Więc:
[ 'A', 'B', ['C-1', 'C-2'], 'D']
zwróci:
[ 'a', 'b', ['c-1', 'c-2'], 'd']
źródło
array_change_value_case
dalej
function array_change_value_case($array, $case = CASE_LOWER){ if ( ! is_array($array)) return false; foreach ($array as $key => &$value){ if (is_array($value)) call_user_func_array(__function__, array (&$value, $case ) ) ; else $array[$key] = ($case == CASE_UPPER ) ? strtoupper($array[$key]) : strtolower($array[$key]); } return $array; } $arrays = array ( 1 => 'ONE', 2=> 'TWO', 3 => 'THREE', 'FOUR' => array ('a' => 'Ahmed', 'b' => 'basem', 'c' => 'Continue'), 5=> 'FIVE', array('AbCdeF')); $change_case = array_change_value_case($arrays, CASE_UPPER); echo "<pre>"; print_r($change_case);
źródło
array_map()
jest właściwą metodą. Ale jeśli chcesz przekonwertować określone wartości tablic lub wszystkie wartości tablic na małe litery pojedynczo, możesz użyćstrtolower()
.for($i=0; $i < count($array1); $i++) { $array1[$i] = strtolower($array1[$i]); }
źródło
Rozwiązanie AIO / rekurencyjne / Unicode | UTF-8 | Obsługa wielu bajtów!
/** * Change array values case recursively (supports utf8/multibyte) * @param array $array The array * @param int $case Case to transform (\CASE_LOWER | \CASE_UPPER) * @return array Final array */ function changeValuesCase ( array $array, $case = \CASE_LOWER ) : array { if ( !\is_array ($array) ) { return []; } /** @var integer $theCase */ $theCase = ($case === \CASE_LOWER) ? \MB_CASE_LOWER : \MB_CASE_UPPER; foreach ( $array as $key => $value ) { $array[$key] = \is_array ($value) ? changeValuesCase ($value, $case) : \mb_convert_case($array[$key], $theCase, 'UTF-8'); } return $array; }
Przykład:
$food = [ 'meat' => ['chicken', 'fish'], 'vegetables' => [ 'leafy' => ['collard greens', 'kale', 'chard', 'spinach', 'lettuce'], 'root' => ['radish', 'turnip', 'potato', 'beet'], 'other' => ['brocolli', 'green beans', 'corn', 'tomatoes'], ], 'grains' => ['wheat', 'rice', 'oats'], ]; $newArray = changeValuesCase ($food, \CASE_UPPER);
Wynik
[ 'meat' => [ 0 => 'CHICKEN' 1 => 'FISH' ] 'vegetables' => [ 'leafy' => [ 0 => 'COLLARD GREENS' 1 => 'KALE' 2 => 'CHARD' 3 => 'SPINACH' 4 => 'LETTUCE' ] 'root' => [ 0 => 'RADISH' 1 => 'TURNIP' 2 => 'POTATO' 3 => 'BEET' ] 'other' => [ 0 => 'BROCOLLI' 1 => 'GREEN BEANS' 2 => 'CORN' 3 => 'TOMATOES' ] ] 'grains' => [ 0 => 'WHEAT' 1 => 'RICE' 2 => 'OATS' ] ]
źródło
Nie mówisz, czy twoja tablica jest wielowymiarowa. Jeśli tak jest, array_map nie będzie działać samodzielnie. Potrzebujesz metody wywołania zwrotnego. W przypadku tablic wielowymiarowych wypróbuj array_change_key_case .
// You can pass array_change_key_case a multi-dimensional array, // or call a method that returns one $my_array = array_change_key_case(aMethodThatReturnsMultiDimArray(), CASE_UPPER);
źródło
`$ Color = array ('A' => 'Blue', 'B' => 'Green', 'c' => 'Red');
$ strtolower = array_map ('strtolower', $ Color);
$ strtoupper = array_map ('strtoupper', $ Color);
print_r ($ strtolower); print_r ($ strtoupper); `
źródło
Możesz także użyć kombinacji
array_flip()
iarray_change_key_case()
. Zobacz ten postźródło
array_flip()
jeśli tablica zawiera zduplikowane wartości.