php array_filter过滤太多了

时间:2017-03-07 10:49:03

标签: php array-filter

以下是代码:

<?php 
$a_campagnes = $this->campagne->get_campagnes_client();
foreach($a_campagnes as $o_camp){
    if($o_camp->groupes){
        foreach($o_camp->groupes as $o_groupe){
            if($o_groupe->IDGroupe == $this->session->o_user->IDGroupe){ echo 'ok';}
        }
    }
}
$a_campagnes = array_filter($a_campagnes, function($o_camp){
    if($o_camp->groupes){
        foreach($o_camp->groupes as $o_groupe){
            if($o_groupe->IDGroupe == $this->session->o_user->IDGroupe) return true;
        }
    }
    return false;
});

$a_campagnes包含前10个对象

第一个foreach的结果是okokokok

$a_campagnes后面array_filter的结果(与第一个foreach的代码相同)是null

与我的第一个foreach匹配的四个对象在哪里?

修改

刚试过那段代码:

$i_id_groupe_user = $this->session->o_user->IDGroupe;
        foreach($a_campagnes as $o_camp){
            if($o_camp->groupes){
                foreach($o_camp->groupes as $o_groupe){
                    if($o_groupe->IDGroupe == $i_id_groupe_user){ echo 'ok';}
                }
            }
        }
        $a_campagnes = array_filter($a_campagnes, function($o_camp) use ($i_id_groupe_user){
            if($o_camp->groupes){
                foreach($o_camp->groupes as $o_groupe){
                    if($o_groupe->IDGroupe == $i_id_groupe_user) return true;
                }
            }
            return false;
        });

它提供与之前相同的结果

1 个答案:

答案 0 :(得分:1)

$this并不存在于匿名函数中,并且您尝试使用它,就像它在您的类范围内一样,这将更不合逻辑。

如果你想在$this->session回调中使用array_filter()内的任何内容,你必须专门为此声明一个类方法,或告诉匿名函数它可以使用它,像这样:

$session = $this->session;
$a_campagnes = array_filter($a_campagnes, function($o_camp) use ($session) {
    if ($o_camp->groupes) {
        foreach($o_camp->groupes as $o_groupe) {
            if ($o_groupe->IDGroupe == $session->o_user->IDGroupe) return true;
        }
    }

    return false;
});