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


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);
}

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.


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.


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']   

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
  )

)

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]);
}

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'
    ]
]

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);

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); `


-2

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


44
Los datos de la matriz se pierden después de llamar array_flip()si la matriz contiene valores duplicados.
Pang
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.