【问题标题】:how to keep array value in outside of closure function with laravel如何使用laravel将数组值保存在闭包函数之外
【发布时间】:2021-04-19 18:14:44
【问题描述】:

我使用闭包函数来创建一个数组。问题是我无法在这个函数之外访问该数组的值。

$categorySlug=array();
    GameModel::with("user")->with("categories")->get()->each(function ($query) use ($categorySlug){
        foreach ($query["categories"] as $item){
            array_push($categorySlug,$item["slug"]);
        }
        // $categorySlug That's right here
    }); 
// $categorySlug here is empty array

如何从函数外部访问函数内部的数组值?

【问题讨论】:

  • 嗯,首先,您需要通过function ($query) use ($categorySlug)$categorySlug 传递到函数中。除此之外,它应该在foreach()->each() 之后可用,并且应该被填充,但前提是$query["categories"] 包含超过0 个元素。这段代码是否有任何错误?
  • 您必须使用引用,因为数组是在写入时复制的
  • @timLevis 我没有任何错误。只是函数外部的 $categorySlug 是空的。但在内部函数中填充了许多数据。

标签: php laravel closures


【解决方案1】:

您需要使用关键字use

$categorySlug=array();
GameModel::with("user")->with("categories")->get()->each(function ($query) use (&$categorySlug) {
    foreach ($query["categories"] as $item){
        array_push($categorySlug,$item["slug"]);
    }
    // $categorySlug is available here
});
// $categorySlug is available here

闭包也可以从父作用域继承变量。任何此类 变量必须传递给使用语言构造。自 PHP 7.1 起, 这些变量不得包含超全局变量、$this 或变量 与参数同名。

请参阅文档中的示例 #4:https://www.php.net/manual/en/functions.anonymous.php

【讨论】:

  • 没关系。我青蛙写的。但这不是我的问题
  • @morteza 这和你的不一样,区别很重要
  • @lagbox 我只想知道如何从外部访问函数内部的变量。这只是一个例子
  • 添加我已经放的代码,它会工作。
  • @alex 我说它的机器人不工作。 $categorySlug 在外部函数中有一个空数组。
【解决方案2】:

我解决了。在闭包函数中返回 $categorySlug。然后将其分配给新值。

$categorySlug=array();
    $categorySlug = GameModel::with("user")->with("categories")->get()->each(function ($query) use ($categorySlug){
        foreach ($query["categories"] as $item){
            array_push($categorySlug,$item->slug);
        }
        return $categorySlug;
    });
    // now $categorySlug filled with many data;

【讨论】:

    猜你喜欢
    • 2021-05-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-24
    • 2016-06-15
    相关资源
    最近更新 更多