【问题标题】:array_push() function not working in Laravelarray_push() 函数在 Laravel 中不起作用
【发布时间】:2017-07-21 17:33:02
【问题描述】:

我正在 Laravel 中开发一个 Web 应用程序。下面的代码不是来自应用程序,而是让您对我遇到的问题有一个简单的了解。

以下代码有效

public $my_users = [];  //This is outside function

$users = [];
$users = User::all();
$this->my_users = $users;

这很简单,工作正常。但是,我希望能够遍历所有用户并添加我选择的用户,如下所示:

public $my_users = [];  //This is outside function

$users = [];
$all_users = User::all();
foreach ($all_users as $user)
{
    array_push($users, $user);
}
$this->my_users = $users;

再一次,我在这里所做的事情背后没有任何逻辑,这只是一个例子。

在这种情况下,两段代码应该有相同的结果。但是,第二段代码不起作用。似乎是 array_push 函数在这里不起作用。有什么理由吗?我在这里做什么?

【问题讨论】:

  • var_dump($users) 的结果是什么; ?
  • 您似乎正在循环一个数组以创建另一个数组,然后在全局数组中进行分配。你为什么这样做?而是不能直接赋值数组吗?
  • 我觉得这里少了点什么。除非 users 表为空(在这种情况下,第一个 sn-p 将有一个对象,第二个将有一个空数组),否则任何一个 sn-ps 都不会失败。

标签: php laravel


【解决方案1】:

Laravel 的查询结果总是collection,所以如果过滤是你真正需要的,那么就这样做:

$users = Users::all()->filter(function ($u) { /* conditions to accept the user */ });

【讨论】:

    【解决方案2】:

    $users.push($user); 我认为这就是你推入数组的方式

    【讨论】:

    • 不是这样
    • 我的错。这就是你在javascript中的方式,但我猜不是在laravel中
    【解决方案3】:

    你可以使用 Laravel 的默认助手而不是 array_push

    array_add()
    

    请参阅此处的文档: https://laravel.com/docs/5.4/helpers#method-array-add

    【讨论】:

      【解决方案4】:

      User::all(); 返回一个类型 collection (Illuminate\Database\Eloquent\Collection)。 所以第一个代码块你定义了一个数组 $users = []; 并立即用以下代码覆盖它:

      $this->my_users = User::all();
      

      所以你基本上是在为$this->my_users 分配一个集合。

      您正在循环遍历集合并将其分配给数组的第二个代码块。

      $this->my_users = [
         //instance of App\User 1,
         //instance of App\User 2 etc
      ];
      

      试试dd的结果,应该能看到更清晰的画面。

      【讨论】:

      • 所以我需要做的是创建一个集合的实例,然后添加到该集合中。你知道怎么做吗?我试过 $users = new \Illuminate\Database\Eloquent\Collection;没用。
      • 您可以将其添加到普通数组中,然后通过 collect($usersArray) 将其转换为集合
      • 我不明白你的意思。我有一个集合 all_users,如何创建另一个集合,以便将 all_users 集合中的特定用户添加到其中?我无法将 all_users 的实例添加到数组中。
      • 您有什么理由想将一个集合添加到另一个集合中?无论如何,您可以通过$newCollection = collect(); 创建一个新集合。然后你可以使用$newCollection->push($all_users);
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-09-14
      • 1970-01-01
      • 2015-03-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-02-19
      相关资源
      最近更新 更多