I have used this function to get multi column from array. Alternate of array_column. I have created this function as array_column not work according my requirement.
My Data
$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
)
)
My function
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']);
Now my result as I expected is:
$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
)
)
You can use this function to get multi columns from array. Hope this will help you.
There is custom function to achieve this,
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 — Exchanges all keys with their associated values in an array
array_intersect_key — Computes the intersection of arrays using keys for comparison
Output
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
)
)
Working demo.