根据键数组获取数组的子集

Key*_*eyo 12 php arrays higher-order-functions

我写了这个函数来获取数组的子集.php是否具有内置功能.我在文档中找不到一个.如果我重新发明轮子,似乎是浪费.

function array_subset($array, $keys) {
    $result = array();
    foreach($keys as $key){
        $result[$key] = $array[$key];
    }
    return $result;
}
Run Code Online (Sandbox Code Playgroud)

Lin*_*usR 12

我也一直想要这个.就像一个PHP版的Underscore的选择.

它很丑陋且反直觉,但我有时会这样做(我认为这可能是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
)
*/
Run Code Online (Sandbox Code Playgroud)

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


pro*_*son 11

array_diff_key并且array_intersect_key可能是你想要的.

  • 当您将关联数组中的键映射到非关联数组中的值表时,可以在一个参数上使用`array_flip`来确保交集/差异基于两个键或两个值,而不是混合一种或另一种. (2认同)