Wie konvertiere ich Array-Werte in PHP in Kleinbuchstaben?


132

Wie kann ich alle Werte in einem Array in PHP in Kleinbuchstaben konvertieren?

So etwas wie array_change_key_case?

Antworten:


355

Verwenden Sie array_map():

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

Falls Sie ein verschachteltes Array in Kleinbuchstaben benötigen (von Yahya Uddin ):

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

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

16
liebe dich, liebe dich, liebe dich
Craig Wayne

Eine schöne Antwort. Vielen Dank
José Ayrám

@Vit usemb_strtolower
user3841429

@ user3841429 mb_strtolower hat nicht geholfen. PHP7.2.
Vit

2
@Vit Hast du es wie folgt benutzt? $yourArray = array_map('mb_strtolower', $yourArray);Ich habe gerade nachgesehen und es hat für Cyrillic
funktioniert

27

Nur der Vollständigkeit halber: Sie können auch verwenden array_walk:

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

Aus PHP-Dokumenten:

Wenn der Rückruf mit den tatsächlichen Werten des Arrays arbeiten muss, geben Sie den ersten Parameter des Rückrufs als Referenz an. Anschließend werden alle an diesen Elementen vorgenommenen Änderungen im ursprünglichen Array selbst vorgenommen.

Oder direkt über eine foreachSchleife mit Referenzen :

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

Beachten Sie, dass diese beiden Methoden das Array "an Ort array_mapund Stelle" ändern, während eine Kopie des Arrays erstellt und zurückgegeben wird, was bei sehr großen Arrays möglicherweise nicht wünschenswert ist.


Verwenden Sie für mehrdimensionale Arrays array_walk_recursive(). Auch mb_strtolower()weil die Welt mehrsprachig ist.
Kodeart

8

Sie können array_map () verwenden, den ersten Parameter auf 'strtolower' (einschließlich der Anführungszeichen) und den zweiten Parameter auf $ lower_case_array setzen.


5

Wenn Sie alle Werte in einem verschachtelten Array in Kleinbuchstaben schreiben möchten , verwenden Sie den folgenden Code:

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

So:

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

würden zurückkehren:

[ 'a', 'b', ['c-1', 'c-2'], 'd']   

3

array_change_value_case

durch weiter

    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()ist die richtige Methode. Wenn Sie jedoch bestimmte Array-Werte oder alle Array-Werte einzeln in Kleinbuchstaben konvertieren möchten, können Sie diese verwenden strtolower().

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

1

AIO Solution / Recursive / Unicode | UTF-8 | Multibyte unterstützt!

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

Beispiel:

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

Ausgabe

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

Sie sagen nicht, ob Ihr Array mehrdimensional ist. Wenn dies der Fall ist, funktioniert array_map nicht alleine. Sie benötigen eine Rückrufmethode. Versuchen Sie für mehrdimensionale Arrays 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' => 'Blau', 'B' => 'Grün', 'c' => 'Rot');

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

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

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


-2

Sie können auch eine Kombination aus array_flip()und verwenden array_change_key_case(). Siehe diesen Beitrag


4
Array-Daten gehen nach dem Aufruf verloren, array_flip()wenn das Array doppelte Werte enthält.
Pang
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.