PHP如何用array_filter加闭包函数过滤数组

$arr = array(
    array(
        'catid' => 2,
        'catdir' => 'notice',
    ),
    array(
        'catid' => 5,
        'catdir' => 'subject',
    ),
    array(
        'catid' => 6,
        'catdir' => 'news'
    ),
);

$catid = 5;
$res = array_filter($arr, function($param) use ($catid) {
    return $param['catid'] == $catid;
});
print_r($res);

我现在的代码输出的是如下一个二级数组

array(1) {
  [1]=>
  array(2) {
    ["catid"]=>
    int(5)
    ["catdir"]=>
    string(7) "subject"
  }
}

我想要输出如下格式

array(2) {
    ["catid"]=>
    int(5)
    ["catdir"]=>
    string(7) "subject"
}

另外我对闭包函数不太明白,还有如下问题
1、$param和$catid这两个变量分别做什么用的
2、use在这里又是做什么用的

阅读 4.2k
3 个回答
$res = current($res);

use的作用是继承变量,讲简单点就是使用外面的变量,你定义一个方法时可以通过传参数的方式,但是如果你使用一个匿名方法,就没法传参数了,就用use,等同于传参数

$catid = 5;
array_filter ($arr, function ($param) use ($catid, &$array) {
    ($param['catid'] == $catid) ? $array = $param : $array = [];
});
    
var_dump ($array);

你可以这样做,达到输出

array(2) {
    ["catid"]=>
    int(5)
    ["catdir"]=>
    string(7) "subject"
}

的结果,
1、$param和$catid这两个变量分别做什么用的
$param是用来存储每次循环的结果,$catid是你需要查询的value值
2、use在这里又是做什么用的
你可以把use内的参数看为实参,是链接闭包与外界可以通讯的变量。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题