基于密钥数组获取数组的子集

问题描述:

我写了这个函数来获取数组的子集。 PHP是否有一个内置的功能。我在文档中找不到一个。如果我重新发明*,似乎是一种浪费。基于密钥数组获取数组的子集

function array_subset($array, $keys) { 
    $result = array(); 
    foreach($keys as $key){ 
     $result[$key] = $array[$key]; 
    } 
    return $result; 
} 
+0

[PHP数组函数返回给定键的子集]的可能副本(https://*.com/questions/12543361/php-array-function-that-returns-a-subset-for-given-keys ) – 2018-03-07 20:27:38

array_diff_keyarray_intersect_key可能是你想要什么。

+1

函数名称是单数。 http://www.php.net/manual/en/ref.array.php PHP需要清理它们的命名约定! – Keyo 2010-08-11 03:13:16

+1

当您将关键字映射到关联数组中以查找非关联数组中的值表时,可以在一个参数上使用'array_flip'确保交集/ diff基于两个键或两个值,而不是一个或另一个的混合。 – danronmoon 2014-02-26 03:38:33

我总是也想这样。像Underscore的pick的PHP版本。

这是丑陋和反直觉的,但我有时做的是(我想这可能是什么prodigitalson在越来越):

$a = ['foo'=>'bar', 'zam'=>'baz', 'zoo'=>'doo']; 

// Extract foo and zoo but not zam 
print_r(array_intersect_key($a, array_flip(['foo', 'zoo']))); 
/* 
Array 
(
    [foo] => bar 
    [zoo] => doo 
) 
*/ 

array_intersect_key返回第一个参数,它的键是所有元素出现在第二个参数(以及所有后续参数,如果有的话)。但是,由于它将按键与按键进行比较,为方便起见,我使用array_flip。我也可以刚刚使用['foo' => null, 'zoo' => null],但这更加丑陋。