我已使用此函数从数组获取多列。替代array_column。我已创建此函数,因为array_column无法根据我的要求运行。
我的数据
$students =
Array
(
[0] => stdClass Object
(
[id] => 498
[uuid] => 6cb91efd-9111-4be8-a2d7-80d3edeed732
[name] => Andrew A. Blaine
[email] => student14@gmail1.com
[usertype_id] => 6
[first_name] => Andrew A.
[last_name] => Blaine
)
[1] => stdClass Object
(
[id] => 499
[uuid] => 208764a0-c53d-404b-ad05-ee7cba28a51c
[name] => Billie C. Heath
[email] => student15@gmail1.com
[usertype_id] => 6
[first_name] => Billie C.
[last_name] => Heath
)
)
我的功能
public function filterArrayByKeys($data, $keys = array()) {
$filterData = array_map(function($e) use ($keys) {
if (is_object($e)) {
foreach ($keys as $key) {
$filterArray[$key] = $e->$key;
}
return $filterArray;
} else {
foreach ($keys as $key) {
$filterArray[$key] = $e[$key];
}
return $filterArray;
}
}, $data);
return array_values(array_unique($filterData, SORT_REGULAR));
}
$students = $this->filterArrayByKeys($students, ['id', 'name', 'email']);
现在我的预期结果是:
$students = Array
(
[0] => Array
(
[id] => 498
[name] => Andrew A. Blaine
[email] => student14@gmail1.com
)
[1] => Array
(
[id] => 499
[name] => Billie C. Heath
[email] => student15@gmail1.com
)
)
您可以使用此功能从数组获取多列。 希望对您有帮助。
答案 0 :(得分:0)
有实现此目的的自定义功能
public function filterArrayByKeys(array $input, array $column_keys)
{
$result = array();
$column_keys = array_flip($column_keys); // getting keys as values
foreach ($input as $key => $val) {
// getting only those key value pairs, which matches $column_keys
$result[$key] = array_intersect_key($val, $column_keys);
}
return $result;
}
$a = $this->filterArrayByKeys($students, ['id','name','email']);
print_r($a);
array_flip-交换数组中所有键及其关联的值
array_intersect_key —使用比较键计算数组的交集
输出
Array
(
[0] => Array
(
[id] => 498
[name] => Andrew A. Blaine
[email] => student14@gmail1.com
)
[1] => Array
(
[id] => 499
[name] => Billie C. Heath
[email] => student15@gmail1.com
)
)
工作demo。