Làm thế nào để chuyển đổi giá trị mảng thành chữ thường trong PHP?


132

Làm cách nào tôi có thể chuyển đổi tất cả các giá trị trong một mảng thành chữ thường trong PHP?

Một cái gì đó như thế array_change_key_casenào?

Câu trả lời:


355

sử dụng array_map():

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

Trong trường hợp bạn cần viết thường mảng lồng nhau (bởi Yahya Uddin ):

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

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

16
yêu bạn, yêu bạn, yêu bạn
Craig Wayne

Một câu trả lời duy nhất tốt đẹp. Cảm ơn
Jose Ayrám

@Vit sử dụngmb_strtolower
user3841429

@ user3841429 mb_strtolower không giúp được gì. PHP7.2.
Vit

2
@Vit Bạn có sử dụng nó như sau không? $yourArray = array_map('mb_strtolower', $yourArray);Tôi vừa kiểm tra và nó hoạt động cho Cyrillic
user3841429

27

Chỉ để hoàn thiện: bạn cũng có thể sử dụng array_walk:

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

Từ các tài liệu PHP:

Nếu gọi lại cần phải làm việc với các giá trị thực của mảng, chỉ định tham số đầu tiên của gọi lại làm tham chiếu. Sau đó, mọi thay đổi được thực hiện cho các phần tử đó sẽ được thực hiện trong chính mảng ban đầu.

Hoặc trực tiếp qua foreachvòng lặp bằng cách sử dụng tài liệu tham khảo :

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

Lưu ý rằng hai phương thức này thay đổi mảng "tại chỗ", trong khi array_maptạo và trả về một bản sao của mảng, có thể không được mong muốn trong trường hợp mảng rất lớn.


Đối với mảng đa chiều, sử dụng array_walk_recursive(). Cũng mb_strtolower()bởi vì Thế giới là đa ngôn ngữ.
kodeart

8

Bạn có thể sử dụng mảng_map (), đặt tham số đầu tiên thành 'strtolower' (bao gồm cả dấu ngoặc kép) và tham số thứ hai thành $ low_case_array.


5

Nếu bạn muốn viết thường tất cả các giá trị trong một mảng lồng nhau , hãy sử dụng mã sau đây:

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

Vì thế:

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

sẽ trở lại:

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

3

mảng_change_value_case

bằng cách tiếp tục

    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()là phương pháp đúng. Nhưng, nếu bạn muốn chuyển đổi các giá trị mảng cụ thể hoặc tất cả các giá trị mảng thành chữ thường, bạn có thể sử dụng strtolower().

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

1

Giải pháp AIO / đệ quy / Unicode | UTF-8 | Multibyte được hỗ trợ!

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

Thí dụ:

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

Đầu ra

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

Bạn không nói nếu mảng của bạn là đa chiều. Nếu có, Array_map sẽ không hoạt động một mình. Bạn cần một phương thức gọi lại. Đối với mảng nhiều chiều, hãy thử mảng_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 = mảng ('A' => 'Blue', 'B' => 'Green', 'c' => 'Red');

$ strtolower = mảng_map ('strtolower', $ Color);

$ strtoupper = mảng_map ('strtoupper', $ Color);

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


-2

Bạn cũng có thể sử dụng kết hợp array_flip()array_change_key_case(). Xem bài này


4
Dữ liệu mảng bị mất sau khi gọi array_flip()nếu mảng chứa các giá trị trùng lặp.
Pang
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.