php - 如何仅使用某些键返回关联数组项?

时间:2017-06-22 14:49:27

标签: php arrays

有一个关联数组:

    Array
   (
    [tableData] => Array
        (
            [0] => Array
            (
                [booking_name] => abc/xyz/123
                [user_area] => ls reca
                [release] => oss72
                [start_date] => 2017-06-20 00:00:00
                [end_date] => 2017-06-23 00:00:00
                [asset_info] => Array
                    (
                        [0] => Array
                            (
                                [status] => 10
                                [manufacturer] => HP
                                [model] => HP BL460C GEN8
                                [hardware_color] => #0066b3
                            )

                    )

                [full_name] => Valay Desai
                [email_address] => valay@xyz.com
            )
            ............,
            [500] => Array()
        )
)

我已使用array_map从另一个对象$filtered_array)获取属性名称。

$filteredColumns = array_map(function($item){
        return $item['attribute'];
    }, $filtered_array);

从这里我得到了以下输出:

Array
(
    [0] => booking_name
    [5] => asset_info
    [6] => full_name
    [7] => start_date
)

此处按键不正常。 asset_info是另一个关联数组。

$filteredData = [];

    foreach ($tableData as $key => $row) {
        $filteredData[$key] = array_filter($filteredColumns, function($item) use ($row){
            $intersect = array_intersect_assoc((array)$item, (array)$row);
            return (count($intersect)) === count($row);
        });
    }

但输出空白数组。

如何使用array_map获得的密钥名称返回主要的大关联数组?如何使用仅与某些键匹配的项目返回主阵列(500项)?

1 个答案:

答案 0 :(得分:1)

我真的不需要使用array_filter。如果你翻转$ filteredColumns(所以列名是数组键),你只需使用array_intersect_key()来获取所需的键。

$filteredColumns = array_flip($filteredColumns);

foreach ($tableData as $key => $row) {
    $filteredData[$key] = array_intersect_key($row, $filteredColumns);
}

根据$ filtered_array的外观,您可以使用http://at2.php.net/manual/en/function.array-column.php而不是array_map