¿Cómo puedo convertir todos los valores de una matriz a minúsculas en PHP?
Algo como array_change_key_case
?
¿Cómo puedo convertir todos los valores de una matriz a minúsculas en PHP?
Algo como array_change_key_case
?
Respuestas:
uso array_map()
:
$yourArray = array_map('strtolower', $yourArray);
En caso de que necesite una matriz anidada en minúsculas (por 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);
Acabo de comprobar y funcionó para cirílico
Solo para completar: también puede usar array_walk
:
array_walk($yourArray, function(&$value)
{
$value = strtolower($value);
});
De documentos PHP:
Si la devolución de llamada necesita trabajar con los valores reales de la matriz, especifique el primer parámetro de devolución de llamada como referencia. Luego, cualquier cambio realizado en esos elementos se realizará en la matriz original.
O directamente a través del foreach
bucle usando referencias :
foreach($yourArray as &$value)
$value = strtolower($value);
Tenga en cuenta que estos dos métodos cambian la matriz "en su lugar", mientras que array_map
crea y devuelve una copia de la matriz, lo que puede no ser deseable en el caso de matrices muy grandes.
array_walk_recursive()
. También mb_strtolower()
porque el mundo es multilingüe.
Puede usar array_map (), establecer el primer parámetro en 'strtolower' (incluidas las comillas) y el segundo parámetro en $ lower_case_array.
Si desea poner en minúscula todos los valores en una matriz anidada , use el siguiente código:
function nestedLowercase($value) {
if (is_array($value)) {
return array_map('nestedLowercase', $value);
}
return strtolower($value);
}
Entonces:
[ 'A', 'B', ['C-1', 'C-2'], 'D']
volvería:
[ 'a', 'b', ['c-1', 'c-2'], 'd']
array_change_value_case
por continuar
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);
Array ( [1] => one [2] => two [3] => three [FOUR] => Array ( [a] => ahmed [b] => basem [c] => continue ) [5] => five [6] => Array ( [0] => abcdef ) )
Solución AIO / Recursiva / Unicode | UTF-8 | ¡Multibyte compatible!
/**
* 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;
}
Ejemplo:
$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);
Salida
[
'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'
]
]
No dice si su matriz es multidimensional. Si es así, array_map no funcionará solo. Necesita un método de devolución de llamada. Para matrices multidimensionales, intente 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);
`$ Color = array ('A' => 'Blue', 'B' => 'Green', 'c' => 'Red');
$ strtolower = array_map ('strtolower', $ Color);
$ strtoupper = array_map ('strtoupper', $ Color);
print_r ($ strtolower); print_r ($ strtoupper); `
También puede usar una combinación de array_flip()
y array_change_key_case()
. Ver esta publicación
array_flip()
si la matriz contiene valores duplicados.