Laravelでデータを加工しているときにSQLで抽出するにもめんどくさそうな条件でやりたい時にarray_filterでぶん回していた時のこと。
$utilities = Utility::where('version', 1)->get()->groupBy('group_number');
$distinctArr = [];
foreach($utilities as $utility) {
if (count($utility) == 1 ) {
array_push($distinctArr, $utility->first()->toArray());
} else if (count($utility) > 1) {
array_filter($utility->toArray(), function ($v) use($distinctArr) {
if (strpos($v['menu'], '確定') !== false) {
// distinctに追加したい
array_push($distinctArr, $v);
}
});
} else {
array_push($distinctArr, $utility[count($utility) - 2]->toArray() );
}
}
細かくログに出した時はDBよりデータは取ってこれていたのに何故かフロントでヒットしない・・・
クロージャ関数内で変数を使いたい時はuse()を使うのはわかっていたが、どうやら変更できないぽい・・・使う前の状態を使うようだ
$utilities = Utility::where('version', 1)->get()->groupBy('group_number');
$distinctArr = [];
foreach($utilities as $utility) {
if (count($utility) == 1 ) {
array_push($distinctArr, $utility->first()->toArray());
} else if (count($utility) > 1) {
// &をつけて参照渡しにする
array_filter($utility->toArray(), function ($v) use(&$distinctArr) {
if (strpos($v['menu'], '確定') !== false) {
array_push($distinctArr, $v);
}
});
} else {
array_push($distinctArr, $utility[count($utility) - 2]->toArray() );
}
}
そんな時はuse()の変数の$の前に&をつけて参照渡しすれば解決。ちゃんとarray_pushできた
コメント