今天采用PHP读了一个xls文件,将xls获取到了数组中。但是由于文件中存在部分空值,因此需要遍历数组将空值去除。这个时候怪异现象就发生了。
1、array_walk不能unset数组本身。
array_walk的回调callback中不能unset删除array_walk的第一个数组参数。这个很好办,我们还可以用use关键字。
2、array_walk中unset数组本身后,下面的数据会发生错乱。
在第一种情况发生后,我们可以通过use关键字来引入数组本身,但是你会发现在回调函数中删除了数组对应的key之后,后面的数据就会出错。原因是数组自身结构发生了改变。
3、最终解决。
其实解决方法很多,比如foreach、array_filter等都可以解决。换个方式即可。而如果还想着用array_walk来解决的话,不妨在array_walk外部定义一个空数组。如下所示:
- //测试读数据模板
- public function readxls(){
- $file_path = ROOT_PATH."static".DS."datatags".DS."datatag.xlsx"; //文件路径
- $data = OfficeService::getArray($file_path,"id,name,datatype,calunit,desc,note");
- $rdata = [];
- unset($data[0]);
- array_walk($data,function ($val) use(&$rdata){
- if(!emptyempty($val['name']) && !emptyempty($val['datatype'])){
- $rdata[] = $val;
- }
- });
- echo "<pre>";
- print_r($rdata);
- }
因为很多程序员自身是比较固执的,所以转换下思路也能得到我们想要的结果。把满足条件的数据重新赋值到新数组中即可。