传递给array_filter的闭包重置使用“ use”关键字传递的外部变量

时间:2019-09-09 17:48:45

标签: php

如果我使用$resultado_frontend来更改array_filter,它只会在函数内部对其进行更改,如果尝试在$resultado_frontend之后访问array_filter,则它是一个空数组。

$resultado_frontend = [];

   $contas_b2w = array_filter($contas->toArray(), function($conta) use($id_admin, $resultado_frontend, $json_tiao) {

        if($conta['id_mkt'] == 3){

                $sku_existe = Anuncio::where([['id_admin', $id_admin], ['conta_id', $conta['id']]])->where('json_jcontrole->sku',  $json_tiao['sku'])->first();

                if($sku_existe){            

                    $resultado_frontend[] = ["essa conta já possui o sku cadastrado para este marketplace"];
                   dd($resultado_frontend); // here the string is inserted into the array


                }else{

                    return $conta;
                }

        }

    });

   dd($resultado_frontend); //If a remove the "dd" inside the closure and let  code reach this "dd", the array will be empty. How can I get around this?

1 个答案:

答案 0 :(得分:0)

我不确定确切的总体目标是什么,因此可能有更好的方法来实现,但是如果要在闭包内部修改$resultado_frontend,则需要use引用它,否则它将按值传递到闭包中。

... use($id_admin, &$resultado_frontend, $json_tiao) { ...