Получить несколько столбцов из массива php, Альтернатива array_column - PullRequest
1 голос
/ 23 апреля 2019

Я использовал эту функцию для получения нескольких столбцов из массива. Альтернатива 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
        )
)

Вы можете использовать эту функцию для получения нескольких столбцов из массива. Надеюсь, это поможет вам.

1 Ответ

1 голос
/ 23 апреля 2019

Для этого есть пользовательская функция,

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
        )

)

Рабочий демо .

Источник .

...