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

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.

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?

Format for your $arr is wrong.

this is wrong:

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

You cannot supply class objects to foreach, it should be a valid array.

It should be like this:

$arr=array(
$key => 'Column Name',
$val = 'value that column should contain'
);

So first convert your object to a valid array.