【问题标题】:How to convert array values to lowercase in PHP?如何在 PHP 中将数组值转换为小写?
【发布时间】:2012-06-16 00:44:27
【问题描述】:

如何在 PHP 中将数组中的所有值转换为小写?

类似array_change_key_case?

【问题讨论】:

    标签: php arrays string lowercase


    【解决方案1】:

    使用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);
    }
    

    【讨论】:

    • @Vit 使用mb_strtolower
    • @user3841429 mb_strtolower 没有帮助。 PHP7.2.
    • @Vit 你是这样使用它的吗? $yourArray = array_map('mb_strtolower', $yourArray); 我刚刚检查过,它适用于西里尔文
    • @user3841429 我错过了一些东西。它确实适用于西里尔字母。给你点赞。
    【解决方案2】:

    为了完整起见:你也可以使用array_walk

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

    来自 PHP 文档:

    如果回调需要使用数组的实际值,请将回调的第一个参数指定为引用。然后,对这些元素所做的任何更改都将在原始数组本身中进行。

    或者直接通过foreach loop使用references

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

    请注意,这两种方法“就地”更改数组,而array_map 创建并返回数组的副本,这在数组非常大的情况下可能不理想。

    【讨论】:

    • 对于多维数组,使用array_walk_recursive()。还有mb_strtolower(),因为世界是多语言的。
    【解决方案3】:

    您可以使用array_map(),将第一个参数设置为'strtolower'(包括引号),将第二个参数设置为$lower_case_array。

    【讨论】:

      【解决方案4】:

      如果您希望将 嵌套 数组中的所有值都小写,请使用以下代码:

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

      【讨论】:

        【解决方案5】:

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

        【讨论】:

          【解决方案6】:

          array_map() 是正确的方法。但是,如果您想将特定数组值或所有数组值一一转换为小写,您可以使用strtolower()

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

          【讨论】:

            【解决方案7】:
            $Color = array('A' => 'Blue', 'B' => 'Green', 'c' => 'Red');
            
            $strtolower = array_map('strtolower', $Color);
            
            $strtoupper = array_map('strtoupper', $Color);
            
            print_r($strtolower);
            print_r($strtoupper);`
            

            【讨论】:

              【解决方案8】:

              AIO 解决方案/递归/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'
                  ]
              ]
              

              【讨论】:

                【解决方案9】:

                你没有说你的数组是否是多维的。如果是,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);
                

                【讨论】:

                  【解决方案10】:

                  ,试试这个解决方案。简单使用php array map

                  function myfunction($value)
                  {
                   return strtolower($value);
                  }
                  
                  $new_array = ["Value1","Value2","Value3" ];
                  print_r(array_map("myfunction",$new_array ));
                  

                  输出Array ( [0] =&gt; value1 [1] =&gt; value2 [2] =&gt; value3 )

                  【讨论】:

                    【解决方案11】:

                    您还可以使用array_flip()array_change_key_case() 的组合。见this post

                    【讨论】:

                    • 如果数组包含重复值,调用array_flip()后数组数据丢失。
                    猜你喜欢
                    • 1970-01-01
                    • 2013-06-30
                    • 1970-01-01
                    • 1970-01-01
                    • 1970-01-01
                    • 1970-01-01
                    • 1970-01-01
                    • 2018-07-15
                    • 1970-01-01
                    相关资源
                    最近更新 更多