PHP'de dizi değerleri küçük harfe nasıl dönüştürülür?


132

Bir dizideki tüm değerleri PHP'de küçük harfe nasıl dönüştürebilirim?

Gibi bir şey array_change_key_case?

Yanıtlar:


355

kullanım array_map():

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

Küçük harfli iç içe diziye ihtiyaç duymanız durumunda ( Yahya Uddin tarafından ):

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

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

16
seni seviyorum, seviyorum, seni seviyorum
Craig Wayne

Tek güzel bir cevap. Teşekkürler
José Ayrám

@Vit kullanımımb_strtolower
user3841429

@ user3841429 mb_strtolower yardımcı olmadı. PHP7.2.
Vit

2
@Vit Aşağıdaki gibi kullandınız mı? $yourArray = array_map('mb_strtolower', $yourArray);Az önce kontrol ettim ve Kiril için çalıştı
user3841429

27

Tamlık için: Ayrıca şunları da kullanabilirsiniz array_walk:

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

PHP belgelerinden:

Geri çağırmanın dizinin gerçek değerleriyle çalışması gerekiyorsa, geri aramanın ilk parametresini başvuru olarak belirtin. Daha sonra, bu elemanlarda yapılan herhangi bir değişiklik orijinal dizinin kendisinde yapılacaktır.

Veya referansları kullanarak doğrudan foreachdöngü yoluyla :

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

Bu iki yöntemin "yerinde" diziyi değiştirdiğini, oysa array_mapdizinin bir kopyasını oluşturup döndürdüğünü unutmayın; bu , çok büyük diziler olması durumunda istenmeyebilir.


Çok boyutlu diziler için kullanın array_walk_recursive(). Ayrıca mb_strtolower()Dünya çok dilli olduğu için.
kodeart

8

Array_map () kullanabilir, ilk parametreyi 'strtolower' (tırnak işaretleri dahil) ve ikinci parametreyi $ lower_case_array olarak ayarlayabilirsiniz.


5

İç içe geçmiş bir dizideki tüm değerleri küçük harfle yazmak isterseniz , aşağıdaki kodu kullanın:

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

Yani:

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

şunu döndürür:

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

3

array_change_value_case

devam ederek

    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()doğru yöntemdir. Ancak, belirli dizi değerlerini veya tüm dizi değerlerini tek tek küçük harfe dönüştürmek istiyorsanız, kullanabilirsiniz strtolower().

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

1

AIO Solution / Recursive / Unicode | UTF-8 | Multibyte destekli!

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

Misal:

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

Çıktı

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

Dizinizin çok boyutlu olup olmadığını söylemiyorsunuz. Eğer öyleyse, array_map tek başına çalışmayacaktır. Bir geri arama yöntemine ihtiyacınız var. Çok boyutlu diziler için array_change_key_case'i deneyin .

// 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

`$ Renk = dizi ('A' => 'Mavi', 'B' => 'Yeşil', 'c' => 'Kırmızı');

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

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

print_r ($ strtolower); print_r ($ strtoupper); '


-2

Ayrıca array_flip()ve kombinasyonunu da kullanabilirsiniz array_change_key_case(). Bu gönderiye bakın


4
Dizi array_flip()yinelenen değerler içeriyorsa , çağrıdan sonra dizi verileri kaybolur .
Pang
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.