从数组php获取多列,array_column的替代

时间:2019-04-23 13:05:46

标签: php arrays array-column

我已使用此函数从数组获取多列。替代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 个答案:

答案 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

Source