我编写了这个函数来获取数组的子集。 php是否具有内置功能。我在文档中找不到一个。如果我重新发明轮子,似乎就像浪费一样。
function array_subset($array, $keys) {
$result = array();
foreach($keys as $key){
$result[$key] = $array[$key];
}
return $result;
}
答案 0 :(得分:11)
我也一直想要这个。就像PHP版本的Underscore的pick。
这是丑陋和反直觉的,但我有时会这样做(我认为这可能是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]
,但这更加丑陋。
答案 1 :(得分:10)
array_diff_key
和array_intersect_key
可能就是您想要的。
答案 2 :(得分:0)
已解决
我认为在PHP中没有直接函数可以从array1
获取一个子集,而另一个array2
的值是我们获取的键名列表。
赞:array_only($array1, 'field1','field2');
但是这种方式可以实现相同。
<?php
$associative_array = ['firstname' => 'John', 'lastname' => 'Smith', 'DOB' => '2000-10-10', 'country' => 'Ireland' ];
$subset = array_intersect_key( $associative_array, array_flip( [ 'lastname', 'country' ] ) );
print_r( $subset );
// Outputs...
// Array ( [lastname] => Smith [country] => Ireland );