我有一个来自我的mysql数据库的项目数据集合,我有一年中的几个月的数组,我想根据项目created_at
属性将每个项目移动到正确的mmonth数组中。
到目前为止,我有这个,
$months = array();
$projects = $organisation->projects->filter(function($project){
$months[date('n', strtotime($project->created_at)) - 1][] = $project;
});
我希望这会产生类似的东西,
0 => array(
'Project 1',
'Project 2,
'...'
),
1 => array(),
2 => array(),
3 => array(),
4 => array(),
5 => array(),
6 => array(),
7 => array(),
8 => array(),
9 => array(),
10 => array(),
11 => array()
所以基本上我想过滤我的集合并将1月份开始的项目放入数组的第一个条目,以及在数组的最后一个月开始于dec的项目,但我得到的所有项目都是空数组,如果我返回项目集合,它充满了项目thoujgh。
答案 0 :(得分:0)
您提供的代码的问题
$months = array();
$projects = $organisation->projects->filter(function($project){
$months[date('n', strtotime($project->created_at)) - 1][] = $project;
});
是匿名函数中的变量$months
与外部变量$months
不同。这就是你的匿名函数什么都不做的原因。
请查看documentation for anonymous functions
闭包还可以从父作用域继承变量。任何这样的 变量必须传递给使用语言构造。
这是PHP与JavaScript不同的地方,例如。您需要声明要在闭包中使用的外部变量,以使它们可用。
另一个重要的注意事项是你应该通过引用&$months
继承变量。
我认为代码应该是
$months = array();
$projects = $organisation->projects->filter(function($project) use (&$months) {
$months[date('n', strtotime($project->created_at)) - 1][] = $project;
});
答案 1 :(得分:0)
$months = array();
$projects = $organisation->projects->filter(function($project){
$months[date('n', strtotime($project->created_at)) - 1][] = $project;
});
而不是尝试如下:
$months = array();
$projects = $organisation->projects->filter(function($project) use ($months){
$months[date('n', strtotime($project->created_at)) - 1][] = $project;
});
由于$months
是外部变量,您想在内部函数中使用
答案 2 :(得分:0)
这是示例代码可以帮助您。
$projects = $organisation->projects->groupBy(function($project,$key){
return date('n', strtotime($project->created_at));
});