วิธีการแปลงค่าอาร์เรย์เป็นตัวพิมพ์เล็กใน PHP?


132

ฉันจะแปลงค่าทั้งหมดในอาร์เรย์เป็นตัวพิมพ์เล็กใน PHP ได้อย่างไร

บางอย่างเช่นarray_change_key_case?

คำตอบ:


355

ใช้array_map():

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

ในกรณีที่คุณต้องการตัวพิมพ์เล็กอาร์เรย์ที่ซ้อนกัน (โดยYahya Uddin ):

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

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

16
รักคุณรักคุณรักคุณ
Craig Wayne

คำตอบเดียวที่ดี ขอบคุณ
JoséAyrám

@Vit usemb_strtolower
user3841429

@ user3841429 mb_strtolower ไม่ได้ช่วยอะไร PHP7.2
Vit

2
@Vit คุณใช้มันดังต่อไปนี้หรือไม่? $yourArray = array_map('mb_strtolower', $yourArray);ฉันเพิ่งตรวจสอบและใช้งานได้กับซิริลลิก
user3841429

27

เพื่อความสมบูรณ์: คุณสามารถใช้array_walk:

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

จากเอกสาร PHP:

หากการเรียกกลับจำเป็นต้องทำงานกับค่าจริงของอาร์เรย์ให้ระบุพารามิเตอร์แรกของการโทรกลับเป็นการอ้างอิง จากนั้นการเปลี่ยนแปลงใด ๆ ที่เกิดขึ้นกับองค์ประกอบเหล่านั้นจะเกิดขึ้นในอาร์เรย์ดั้งเดิมเอง

หรือโดยตรงผ่านforeachลูปโดยใช้การอ้างอิง :

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

โปรดสังเกตว่าสองวิธีนี้เปลี่ยนอาร์เรย์ "ในตำแหน่ง" ในขณะที่array_mapสร้างและส่งคืนสำเนาของอาร์เรย์ซึ่งอาจไม่เป็นที่ต้องการในกรณีของอาร์เรย์ที่มีขนาดใหญ่มาก


array_walk_recursive()สำหรับอาร์เรย์หลายมิติการใช้งาน ด้วยmb_strtolower()เพราะโลกนี้พูดได้หลายภาษา
kodeart

8

คุณสามารถใช้ array_map () ตั้งค่าพารามิเตอร์แรกเป็น 'strtolower' (รวมถึงเครื่องหมายคำพูด) และพารามิเตอร์ที่สองเป็น $ lower_case_array


5

หากคุณต้องการพิมพ์เล็กค่าทั้งหมดในอาร์เรย์ที่ซ้อนกันให้ใช้รหัสต่อไปนี้:

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

ดังนั้น:

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

จะกลับมา:

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

3

array_change_value_case

โดยดำเนินการต่อ

    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()เป็นวิธีการที่ถูกต้อง strtolower()แต่ถ้าคุณต้องการแปลงค่าอาร์เรย์ที่เฉพาะเจาะจงหรือค่าอาร์เรย์ทั้งหมดเพื่อพิมพ์เล็กหนึ่งโดยหนึ่งคุณสามารถใช้

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

1

AIO Solution / Recursive / Unicode | UTF-8 | รองรับหลายไบต์!

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

ตัวอย่าง:

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

เอาท์พุต

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

คุณไม่ได้บอกว่าอาร์เรย์ของคุณเป็นแบบหลายมิติหรือไม่ ถ้าเป็นเช่นนั้น array_map จะไม่ทำงานเพียงอย่างเดียว คุณต้องการวิธีโทรกลับ สำหรับอาร์เรย์หลายมิติลอง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' => 'น้ำเงิน', 'B' => 'เขียว', 'c' => 'แดง');

$ strtolower = array_map ('strtolower', $ สี);

$ strtoupper = array_map ('strtoupper', $ สี);

print_r ($ Strtolower); print_r ($ strtoupper); `


-2

คุณยังสามารถใช้การรวมกันของarray_flip()และarray_change_key_case(). ดูโพสต์นี้


4
ข้อมูลอาร์เรย์จะหายไปหลังจากเรียกarray_flip()ถ้าอาร์เรย์มีค่าที่ซ้ำกัน
ปัง
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.