【问题标题】:laravel: cant push object property to array [duplicate]laravel:无法将对象属性推送到数组[重复]
【发布时间】:2018-12-13 14:25:58
【问题描述】:

我陷入了一个愚蠢的代码示例,但我找不到解决方案。我有这个代码:

Route::get('/example', function(){
    $arr=[];
    Collection::all()->each(function($collection){
        $arr[]= $collection->id;
    });
    dd($arr);
}); 

尽管 Collection:all() 内部有对象,但它一直返回给我一个空数组。有人可以帮我吗?

【问题讨论】:

  • 认为@ThomasEdwards 是对的。他的链接也包含解决方案。问题在于通过use 传递数组
  • 虽然“重复”线程确实回答了直接问题,但这个问题的精神是,如何正确使用集合来获得预期的结果。它也没有解释 Collection Closures 如何实际重新绑定到 Collection 类,以便它可以 操作$items 属性。 @kakavia,看看transform() 方法。它基本上类似于map(),但操作的是原始数组而不是产生一个新数组。 laravel.com/docs/5.7/collections#method-transform
  • 感谢大家的帮助!这实际上是一个我不知道的范围问题。
  • @Claymore 感谢您的指示。我实际上不想在任何地方使用我的任何代码或拆分它或其他任何东西,我只是好奇为什么这不起作用。我不知道匿名函数回调会发生这种情况。

标签: php laravel


【解决方案1】:

each 部分中,您定义函数,使其具有变量的新范围。

试试PHP函数的use为:

Route::get('/example', function(){
    $arr=[];
    Collection::all()->each(function($collection) use (&$arr){
        $arr[]= $collection->id;
    });
    dd($arr);
}); 

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-05-24
    • 1970-01-01
    • 2014-05-16
    • 1970-01-01
    • 2021-12-04
    • 1970-01-01
    • 2018-07-20
    • 2020-04-29
    相关资源
    最近更新 更多