php - Laravel Collection 循环更新元素

标签 php laravel laravel-collection

我声明了一个 collect() 数据类型的变量。我想遍历它,并更新每一行的特定列。

示例代码:

    $a = collect([
        ['one' => 1, 'two' => 2],
        ['one' => 3, 'two' => 4],
        ['one' => 5, 'two' => 6]
    ]);

    foreach ($a as $b) {
        $b['one'] = 0;
    }

    dd($a);

我不明白,为什么结果是这样的:


Collection {#510 ▼
  #items: array:3 [▼
    0 => array:2 [▼
      "one" => 1
      "two" => 2
    ]
    1 => array:2 [▼
      "one" => 3
      "two" => 4
    ]
    2 => array:2 [▼
      "one" => 5
      "two" => 6
    ]
  ]
}

我希望每一行的结果为“一”=> 0。

最佳答案

您没有修改原始数组,没有地方可以将修改后的项目存储回数组。为此,最好对集合本身使用 map 函数。

$a = collect([['one' => 1, 'two' => 2], ['one' => 3, 'two' => 4], ['one' => 5, 'two' => 6]]);

$a = $a->map(function($item) { 
    $item['one'] = 0; 
    return $item; 
});

每种方式:

foreach ($a as $key => $b) {
   $b['one'] = 0;
   $a[$key] = $b; // override the original item.
}

关于php - Laravel Collection 循环更新元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55352923/

相关文章:

javascript - 使用 PHP 将数据从 Javascript 插入到 MySQL

laravel - Laravel 中的 attach() 方法有什么用?

php - Laravel - 找不到关系时用空数组替换 null

php - 在 Laravel 中使用 Baum 获取可注释的类属性

php - ^ 在 PHP 中是什么意思?

php - 获取正则表达式中的所有匹配项

javascript - 更改 JSON_Encode 输出格式(括号和逗号)

javascript - Laravel + Vue 2 如何在不同页面运行某些功能

php - 为 laravel5 表单验证中的字段设置自定义验证消息?

php - 升级 laravel 5.1 - 5.4 时如何修复 'You must set the encryption key going forward to improve the security of this library' 错误