【问题标题】:Looking for array_map equivalent to work on keys in associative arrays寻找与处理关联数组中的键等效的 array_map
【发布时间】:2013-07-25 17:23:45
【问题描述】:

假设我有一个关联数组:

    $array = array(
      "key1" => "value",
      "key2" => "value2");

我想让键全部大写。我会怎么做而不是通用方式(这意味着我可以应用用户定义的函数来应用到键名)?

【问题讨论】:

    标签: php associative-array array-map


    【解决方案1】:

    可以使用php的array_change_key_case函数

    <?php
    $input_array = array("FirSt" => 1, "SecOnd" => 4);
    print_r(array_change_key_case($input_array, CASE_UPPER));
    ?>
    

    【讨论】:

    • 啊不知道那个具体的,但问题实际上更多是关于像 array_map 这样的通用机制,我可以将用户定义的函数应用于键。
    • 使用 array_map 你不能根据你的要求调整键。更详细的解释可以在这里找到stackoverflow.com/a/3432266/2266525
    【解决方案2】:

    令人惊讶的是,有一个array_change_key_case function

    【讨论】:

    • 太奇怪了。直到现在才听说过。
    【解决方案3】:

    除了上面的答案——下面的代码可以解决问题。好处是您可以将其用于keys 上的任何操作,而不是 制作密钥uppercase

    <?php
       $arr = array(
          "key1" => "value",
          "key2" => "value2"
       );
    
      echo "<pre>";print_r($arr);echo "</pre>";
    
      $arra = array_combine(
            array_map(function($k){ 
               return strtoupper($k); 
            }, array_keys($arr)
        ), $arr);
    
      echo "<pre>";print_r($arra);echo "</pre>";
    

    此代码输出为:

    Array
    (
        [key1] => value
        [key2] => value2
    )
    Array
    (
        [KEY1] => value
        [KEY2] => value2
    )
    

    所以这只是一个替代更通用的解决方案来改变数组的keys

    谢谢。

    【讨论】:

      【解决方案4】:

      您可以使用 foreach 循环:

      $newArray = array();
      foreach ($array as $k => $v) {
          $newArray[strtoupper($k)] = $v;
      }
      

      【讨论】:

      • 这样,旧的key仍然存在于数组中。因此,您还必须使用 unset($array[$k]); 取消设置旧的
      猜你喜欢
      • 2011-02-07
      • 1970-01-01
      • 1970-01-01
      • 2013-05-13
      • 2011-09-24
      • 2011-08-18
      • 2014-05-02
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多