每日更新
实现方法千万般,多加思考最优解
2020-5-25 luke


我有一个这样的需求,需要将输出的$data数组的内容进行自定义,当$type不一样的时候,显示不一样的字段,如type=a时,显示a,b,c三个字段,当type=b时,显示a,c,e字段,而且由于还要将数据导出到excel中,需要根据不同的类型对表头进行自定义显示字段的中文名,于是定义$fieldMap 如下。


$fieldMap = [
'a' => ['a'=>'字段A','b'=>'字段B','c'=>'字段C',],
'b' => ['a'=>'字段A','c'=>'字段C',],
'c' => ['a'=>'字段A','b'=>'字段B','d'=>'字段D',],
];


原来实现代码如下:


foreach ($data as &$item) {
foreach ($item as $k => &$v) {
if (!key_exists($k, $fieldMap[$type])) {
unset($item[$k]);
}
}
}


觉得太差了,好不容易发现一个array_replace这个函数,发现和array_merge其实差不多。不过无意中看到手册下面的一条评论,正好解决了我的问题,array_intersect_key用的确实好呀。于是下面这样一行代码就解决了。


$data[] = array_replace($tmp, array_intersect_key($row, $tmp));