2009-06-02 65 views
5

我想要一个快速简单的方法来复制一个数组,但能够指定我想要复制的数组中的哪些键。从PHP中的密钥列表创建新阵列

我可以很容易地为此编写一个函数,但我想知道是否有一个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'); 

回答

1

简单的方法:

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

foreach ($chosen as $key) 
    $new[$key] = $sizes[$key]; 
9

有一个在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); 
?> 

$结果将包含:

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

感谢您的。 构建数组的一个更好的方法: $ selected = array_fill_keys('small','large',null); 虽然它还不是很优雅。我认为仍然值得写'array_from_keys'函数。 – bradt 2009-06-26 04:40:38

4

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

$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'); 
+0

您发布的第一个解决方案是整个“线程”中最好的一个:) – 2009-06-02 11:51:43