dousilie9522 2014-07-20 02:54
浏览 75
已采纳

根据另一个数组过滤多维数组

I'm creating a PHP class that manipulates csv files. As part of the class I have a function that allows the data to be filtered showOnlyWhere. However I get this error Invalid argument supplied for foreach() on line 331 (the line with the foreach statement). I tried adding global $arr; but that didn't work. How would i fix it?

$this -> rows is a multi-dimensional array that contains all the csv data.

$arr is in the format:

$key=>$val array(
$key = Column Name
$val = value that column should contain
)

Below is the showOnlyWhere function

function showOnlyWhere($arr)
    {

                if($this->showOnlyWhere == true){
                    $rows = $this->filteredRows;
                }
                else{
                    $rows = $this->rows;
                }

                $filter = function ($item){
                        global $arr; // didn't work
                        foreach($arr as $chkCol => $chkVal){
                            if ($item[$arr[$chkCol]] != $chkVal ){
                                return false;
                                break(3);
                            }                      
                        }
                        return true;
                    };


                $this->filteredRows = array_filter($rows,$filter);                  


                $this->showOnlyWhere = true;    
}

I think the error might have something to do with the Anonymous function - but I'm not really sure.

  • 写回答

2条回答 默认 最新

  • douwei3280 2014-07-20 03:00
    关注

    instead of using global $arr you can make $arr available to the anonymous function via use

    $filter = function ($item) use ($arr) {
        //global $arr; // didn't work
        foreach($arr as $chkCol => $chkVal){
            if ($item[$arr[$chkCol]] != $chkVal ){
                return false;
            }                      
        }
        return true;
    };
    

    Also, I noticed that you are assigning $rows = $this->filteredRows; before you populate $this->filteredRows. I'm not sure if that's intentional?

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥15 乌班图ip地址配置及远程SSH
  • ¥15 怎么让点阵屏显示静态爱心,用keiluVision5写出让点阵屏显示静态爱心的代码,越快越好
  • ¥15 PSPICE制作一个加法器
  • ¥15 javaweb项目无法正常跳转
  • ¥15 VMBox虚拟机无法访问
  • ¥15 skd显示找不到头文件
  • ¥15 机器视觉中图片中长度与真实长度的关系
  • ¥15 fastreport table 怎么只让每页的最下面和最顶部有横线
  • ¥15 java 的protected权限 ,问题在注释里
  • ¥15 这个是哪里有问题啊?