¿Cómo convertir valores de matriz a minúsculas en PHP?

132

¿Cómo puedo convertir todos los valores de una matriz a minúsculas en PHP?

Algo como array_change_key_case?

usuario1163513
fuente

Respuestas:

355

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);
}
ariefbayu
fuente
16
te amo, te amo, te amo
Craig Wayne
Una buena respuesta única. Gracias
José Ayrám
Uso de @Vitmb_strtolower
usuario3841429
@ user3841429 mb_strtolower no ayudó. PHP7.2.
Vit
2
@Vit ¿Lo usaste de la siguiente manera? $yourArray = array_map('mb_strtolower', $yourArray);Acabo de comprobar y funcionó para cirílico
usuario3841429
27

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 foreachbucle 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_mapcrea y devuelve una copia de la matriz, lo que puede no ser deseable en el caso de matrices muy grandes.

Alex Shesterov
fuente
Para matrices multidimensionales, use array_walk_recursive(). También mb_strtolower()porque el mundo es multilingüe.
kodeart
8

Puede usar array_map (), establecer el primer parámetro en 'strtolower' (incluidas las comillas) y el segundo parámetro en $ lower_case_array.

verosimilitud
fuente
5

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']   
Yahya Uddin
fuente
3

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
  )

)
كونتينيو للآبد
fuente
2

array_map()Es el método correcto. Pero, si desea convertir valores de matriz específicos o todos los valores de matriz en minúsculas uno por uno, puede usar strtolower().

for($i=0; $i < count($array1); $i++) {
    $array1[$i] = strtolower($array1[$i]);
}
Jasmeen
fuente
1

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'
    ]
]
Junaid Atari
fuente
1

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);
Gregory Bologna
fuente
0

`$ Color = array ('A' => 'Blue', 'B' => 'Green', 'c' => 'Red');

$ strtolower = array_map ('strtolower', $ Color);

$ strtoupper = array_map ('strtoupper', $ Color);

print_r ($ strtolower); print_r ($ strtoupper); `

Hasnath Rumman
fuente
-2

También puede usar una combinación de array_flip()y array_change_key_case(). Ver esta publicación

Jasir
fuente
44
Los datos de la matriz se pierden después de llamar array_flip()si la matriz contiene valores duplicados.
Pang