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?

user1163513
quelle

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);
}
Ariefbayu
quelle
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.

Alex Shesterov
quelle
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.

Wahrhaftigkeit
quelle
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']   
Yahya Uddin
quelle
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
  )

)
كونتينيو للآبد
quelle
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]);
}
Jasmeen
quelle
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'
    ]
]
Junaid Atari
quelle
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);
Gregory Bologna
quelle
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); `

hasnath rumman
quelle
-2

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

Jasir
quelle
4
Array-Daten gehen nach dem Aufruf verloren, array_flip()wenn das Array doppelte Werte enthält.
Pang