dousilie9522 2014-07-19 18: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-19 19: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条)
编辑
预览

报告相同问题?

手机看
程序员都在用的中文IT技术交流社区

程序员都在用的中文IT技术交流社区

专业的中文 IT 技术社区,与千万技术人共成长

专业的中文 IT 技术社区,与千万技术人共成长

关注【CSDN】视频号,行业资讯、技术分享精彩不断,直播好礼送不停!

关注【CSDN】视频号,行业资讯、技术分享精彩不断,直播好礼送不停!

客服 返回
顶部