【问题标题】:Create new array from key list in PHP从 PHP 中的键列表创建新数组
【发布时间】:2009-06-02 05:29:35
【问题描述】:

我想要一种快速简便的方法来复制数组,但能够指定要复制的数组中的哪些键。

我可以很容易地为此编写一个函数,但我想知道是否已经有一个 PHP 函数可以做到这一点。类似于下面的array_from_keys() 函数。

$sizes = array('small' => '10px', 'medium' => '12px', 'large' => '13px');

$chosen = array_from_keys($sizes, 'small', 'large');

// $chosen = array('small' => '10px', 'large' => '13px');

【问题讨论】:

    标签: php arrays


    【解决方案1】:

    PHP 中有一个允许此类操作的本机函数,即 array_intersect_key,但是您必须稍微修改一下语法。

     <?php
          $sizes = array('small' => '10px', 'medium' => '12px', 'large' => '13px');
          $selected = array_fill_keys(array('small', 'large'), null); 
          $result = array_intersect_key($sizes, $selected);
     ?>
    

    $result 将包含:

        Array (
            [small] => 10px
            [large] => 13px
        );
    

    【讨论】:

    • 谢谢。构建数组的更好方法: $selected = array_fill_keys('small', 'large', null);虽然它仍然不是很优雅。我认为仍然值得写 'array_from_keys' 函数。
    【解决方案2】:

    据我所知,没有此功能。我认为最简单的方法是做这样的事情:

    $chosen = array_intersect_key($sizes, array_flip(array('small', 'large')));  
    

    或者如您所说,您可以轻松编写一个函数:

    function array_from_keys() {
        $params = func_get_args();
        $array = array_shift($params);
        return array_intersect_key($array, array_flip($params));
    }
    
    $chosen = array_from_keys($sizes, 'small', 'large');
    

    【讨论】:

    • 你发布的第一个解决方案是整个“线程”中最好的一个:)
    【解决方案3】:

    简单的方法:

    $sizes = array('small' => '10px', 'medium' => '12px', 'large' => '13px');
    $chosen = array("small", "large");
    $new = array();
    
    foreach ($chosen as $key)
      $new[$key] = $sizes[$key];
    

    【讨论】:

      猜你喜欢
      • 2011-06-22
      • 2012-11-23
      • 1970-01-01
      • 1970-01-01
      • 2019-08-11
      • 1970-01-01
      • 2020-05-10
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多