我正在创建一个操纵csv文件的PHP类。
作为课程的一部分,我有一个允许过滤数据的函数showOnlyWhere
。但是我在第331行(带有Invalid argument supplied for foreach()
语句的行)上收到此错误foreach
。我尝试添加global $arr;
,但这不起作用。我该如何解决?
$this -> rows
是一个包含所有csv数据的多维数组。
$arr
的格式为:
$key=>$val array(
$key = Column Name
$val = value that column should contain
)
以下是showOnlyWhere
功能
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;
}
我认为错误可能与匿名功能有关 - 但我不太确定。
答案 0 :(得分:2)
而不是使用global $arr
,您可以通过$arr
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;
};
此外,我注意到您在填充$rows = $this->filteredRows;
之前指定了$this->filteredRows
。我不确定这是否是故意的?
答案 1 :(得分:0)
$ arr的格式错误。
这是错误的:
$key=>$val array(
$key = Column Name
$val = value that column should contain
)
你不能为foreach提供类对象,它应该是一个有效的数组。
应该是这样的:
$arr=array(
$key => 'Column Name',
$val = 'value that column should contain'
);
首先将对象转换为有效数组。