[PHP] クロージャ関数内で追加したい

Laravel

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できた

コメント

タイトルとURLをコピーしました