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 centos7.9 IPv6端口telnet和端口监控问题
  • ¥120 计算机网络的新校区组网设计
  • ¥20 完全没有学习过GAN,看了CSDN的一篇文章,里面有代码但是完全不知道如何操作
  • ¥15 使用ue5插件narrative时如何切换关卡也保存叙事任务记录
  • ¥20 海浪数据 南海地区海况数据,波浪数据
  • ¥20 软件测试决策法疑问求解答
  • ¥15 win11 23H2删除推荐的项目,支持注册表等
  • ¥15 matlab 用yalmip搭建模型,cplex求解,线性化处理的方法
  • ¥15 qt6.6.3 基于百度云的语音识别 不会改
  • ¥15 关于#目标检测#的问题:大概就是类似后台自动检测某下架商品的库存,在他监测到该商品上架并且可以购买的瞬间点击立即购买下单