2016-04-18 13 views
0

私はmysqlデータベースからプロジェクトデータのコレクションを持っています。私は月の配列を持っています。プロジェクトcreated_atに基づいて正確なmmonth配列に各プロジェクトを移動したいと思います。laravelコレクションからデータ配列を作成

は、これまでのところ、私はこれを持って、私はこのようなものを作成することを望んでいるだろう

$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月1日の配列の最初のエントリには、配列の最後の月に12月に始まったプロジェクトが、私はプロジェクトのコレクションを返す場合、私はすべての戻り値を空の配列です、それはプロジェクトthoujghでいっぱいです。

+0

これは、次の月をプリントアウトすると、空の配列が得られますか? –

+0

'$ organisation-> projects'がコレクションを返すのですか?コードが正しいと思われるので、一度だけ提案のチェックをしてください。 –

答えて

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が異なる場合があります。クロージャーで使用する外部変数を宣言して、それらを使用可能にする必要があります。

もう1つ重要なことは、変数&$monthsによって変数を継承することです。私はコードは、これに代えて

$months = array(); 
$projects = $organisation->projects->filter(function($project) use (&$months) { 
    $months[date('n', strtotime($project->created_at)) - 1][] = $project; 
}); 
0
$months = array(); 
$projects = $organisation->projects->filter(function($project){ 
    $months[date('n', strtotime($project->created_at)) - 1][] = $project; 
}); 

されるべきだと思う

は、以下のようにしてみてください:$monthsとして

$months = array(); 
$projects = $organisation->projects->filter(function($project) use ($months){ 
    $months[date('n', strtotime($project->created_at)) - 1][] = $project; 
}); 

を外部変数であり、あなたは、内側の機能

に使用していました
0

これはあなたに役立つサンプルコードです。

$projects = $organisation->projects->groupBy(function($project,$key){ 
    return date('n', strtotime($project->created_at)); 
}); 
関連する問題