Comment convertir des valeurs de tableau en minuscules en PHP?

132

Comment puis-je convertir toutes les valeurs d'un tableau en minuscules en PHP?

Quelque chose comme array_change_key_case?

user1163513
la source

Réponses:

355

utiliser array_map():

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

Au cas où vous auriez besoin d'un tableau imbriqué en minuscules (par Yahya Uddin ):

$yourArray = array_map('nestedLowercase', $yourArray);

function nestedLowercase($value) {
    if (is_array($value)) {
        return array_map('nestedLowercase', $value);
    }
    return strtolower($value);
}
ariefbayu
la source
16
je t'aime, je t'aime, je t'aime
Craig Wayne
Une belle réponse unique. Merci
José Ayrám
@Vit usemb_strtolower
user3841429
@ user3841429 mb_strtolower n'a pas aidé. PHP7.2.
Vit
2
@Vit L'avez-vous utilisé comme suit? $yourArray = array_map('mb_strtolower', $yourArray);Je viens de vérifier et cela a fonctionné pour le cyrillique
user3841429
27

Juste pour être complet: vous pouvez également utiliser array_walk:

array_walk($yourArray, function(&$value)
{
  $value = strtolower($value);
});

À partir de la documentation PHP:

Si le rappel doit fonctionner avec les valeurs réelles du tableau, spécifiez le premier paramètre de rappel comme référence. Ensuite, toutes les modifications apportées à ces éléments seront effectuées dans le tableau d'origine lui-même.

Ou directement via une foreachboucle en utilisant des références :

foreach($yourArray as &$value)
  $value = strtolower($value);

Notez que ces deux méthodes modifient le tableau "en place", alors que array_mapcrée et renvoie une copie du tableau, ce qui peut ne pas être souhaitable dans le cas de très grands tableaux.

Alex Shesterov
la source
Pour les tableaux multidimensionnels, utilisez array_walk_recursive(). Aussi mb_strtolower()parce que le monde est multilingue.
kodeart
8

Vous pouvez utiliser array_map (), définir le premier paramètre sur 'strtolower' (y compris les guillemets) et le second paramètre sur $ lower_case_array.

vraisemblance
la source
5

Si vous souhaitez mettre en minuscules toutes les valeurs d'un tableau imbriqué , utilisez le code suivant:

function nestedLowercase($value) {
    if (is_array($value)) {
        return array_map('nestedLowercase', $value);
    }
    return strtolower($value);
}

Alors:

[ 'A', 'B', ['C-1', 'C-2'], 'D']

retournerais:

[ 'a', 'b', ['c-1', 'c-2'], 'd']   
Yahya Uddin
la source
3

array_change_value_case

en continuant

    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
  )

)
كونتينيو للآبد
la source
2

array_map()est la bonne méthode. Mais, si vous souhaitez convertir des valeurs de tableau spécifiques ou toutes les valeurs de tableau en minuscules une par une, vous pouvez utiliser strtolower().

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

Solution AIO / Recursive / Unicode | UTF-8 | Prise en charge de plusieurs octets!

/**
 * 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;
}

Exemple:

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

Production

    [
    '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
la source
1

Vous ne dites pas si votre tableau est multidimensionnel. Si c'est le cas, array_map ne fonctionnera pas seul. Vous avez besoin d'une méthode de rappel. Pour les tableaux multidimensionnels, essayez 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 Bologne
la source
0

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

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

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

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

hasnath rumman
la source
-2

Vous pouvez également utiliser une combinaison de array_flip()et array_change_key_case(). Voir ce post

Jasir
la source
4
Les données du tableau sont perdues après l'appel array_flip()si le tableau contient des valeurs dupliquées.
Pang