PHP array_filter 带有回调参数

MB3*_*B34 1 php arrays filtering

我需要在 PHP 中过滤数组,但不确定如何将参数传递给回调。本质上,我对数组中的每个项目进行两次比较。

// This data will be sent to the function as JSON so I'm "creating" the JSON here.
$data = json_encode(Array(
    Array("StartDate"=>"2014/07/31","LocZipCode"=>"19406","LocationURL"=>"FSU","EventType"=>"UN"),
    Array("StartDate"=>"2014/08/31","LocZipCode"=>"23513","LocationURL"=>"FSU","EventType"=>"UN"),
    Array("StartDate"=>"2014/07/31","LocZipCode"=>"92108","LocationURL"=>"BU","EventType"=>"UN"),
    Array("StartDate"=>"2014/09/30","LocZipCode"=>"78661","LocationURL"=>"BU","EventType"=>"UN")
));

// even using a global variable doesn't 
// make it visible in getUniv() function
global $univ_seg;
$univ_seg = 'FSU';

getUA($data, $univ_seg);

function getUniv($var){
    return($var["EventType"] == "UN" && $var["LocationURL"] == $univ_seg);
}

function getUA($data, $univ_seg) {
    $univ_sched = json_decode($data, true);
    $re = array_filter($univ_sched, "getUniv");
    print_r($re); 
}
Run Code Online (Sandbox Code Playgroud)

我也尝试过使用 lambda 但我无法让它工作。有任何想法吗??

Sam*_*fel 5

// even using a global variable doesn't 
// make it visible in getUniv() function
global $univ_seg;
$univ_seg = 'FSU';
Run Code Online (Sandbox Code Playgroud)

这不是全局变量的工作方式 - 要访问全局变量,您需要global在要使用它的每个范围中都有一个匹配的声明。

function getUniv($var){
    global $univ_seg;
    return($var["EventType"] == "UN" && $var["LocationURL"] == $univ_seg);
}
Run Code Online (Sandbox Code Playgroud)

不过,作为匿名函数,这会更好地工作:

$re = array_filter($univ_sched, function getUniv($var) use ($univ_seg) {
    return($var["EventType"] == "UN" && $var["LocationURL"] == $univ_seg);
});
Run Code Online (Sandbox Code Playgroud)