How to convert array values to lowercase in PHP?

前端 未结 10 754
北恋
北恋 2020-11-30 19:26

How can I convert all values in an array to lowercase in PHP?

Something like array_change_key_case?

相关标签:
10条回答
  • 2020-11-30 20:02

    use array_map():

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

    In case you need to lowercase nested array (by Yahya Uddin):

    $yourArray = array_map('nestedLowercase', $yourArray);
    
    function nestedLowercase($value) {
        if (is_array($value)) {
            return array_map('nestedLowercase', $value);
        }
        return strtolower($value);
    }
    
    0 讨论(0)
  • 2020-11-30 20:03

    Just for completeness: you may also use array_walk:

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

    From PHP docs:

    If callback needs to be working with the actual values of the array, specify the first parameter of callback as a reference. Then, any changes made to those elements will be made in the original array itself.

    Or directly via foreach loop using references:

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

    Note that these two methods change the array "in place", whereas array_map creates and returns a copy of the array, which may not be desirable in case of very large arrays.

    0 讨论(0)
  • 2020-11-30 20:10

    array_map() is the correct method. But, if you want to convert specific array values or all array values to lowercase one by one, you can use strtolower().

    for($i=0; $i < count($array1); $i++) {
        $array1[$i] = strtolower($array1[$i]);
    }
    
    0 讨论(0)
  • 2020-11-30 20:11

    You could use array_map(), set the first parameter to 'strtolower' (including the quotes) and the second parameter to $lower_case_array.

    0 讨论(0)
  • 2020-11-30 20:12

    array_change_value_case

    by continue

        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
      )
    
    )
    
    0 讨论(0)
  • 2020-11-30 20:14

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

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

    Example:

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

    Output

        [
        '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'
        ]
    ]
    
    0 讨论(0)
提交回复
热议问题