实现方法千万般,多加思考最优解
我有一个这样的需求,需要将输出的$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));