我编写了这个函数来获取数组的一个子集。php 是否有为此的内置函数。我在文档中找不到。如果我重新发明轮子,这似乎是一种浪费。
function array_subset($array, $keys) {
$result = array();
foreach($keys as $key){
$result[$key] = $array[$key];
}
return $result;
}
我编写了这个函数来获取数组的一个子集。php 是否有为此的内置函数。我在文档中找不到。如果我重新发明轮子,这似乎是一种浪费。
function array_subset($array, $keys) {
$result = array();
foreach($keys as $key){
$result[$key] = $array[$key];
}
return $result;
}
我也一直想要这个。就像 Underscore's 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]
,但这更丑陋。
array_diff_key
并且array_intersect_key
可能是您想要的。
我认为在 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 );