【问题标题】:unable to change value of a key value pair array [duplicate]无法更改键值对数组的值 [重复]
【发布时间】:2021-08-23 05:46:42
【问题描述】:

我对 php 数组不是很熟悉,并试图更改从 laravel 集合生成的数组的值但没有成功。 这是代码:

$items = Purchase::find($id)->items->toArray();
foreach ($items as $i) {
    $i['itemdesc'] = "Test";
}
info($items);

$items 数组如下所示:

[2021-06-05 17:29:20] local.INFO: array (
  0 => 
  array (
    'itemcode' => '54',
    'itemdesc' => 'FARROAD 225/40ZR18  FRD26 92W XL',
  ),
  1 => 
  array (
    'itemcode' => '141',
    'itemdesc' => 'TRACKMAX 225/40ZR19 X-PRIVILO TX3 93Y XL',
  ),

itemdesc 的值没有改变。 如果我在 foreach 循环中添加 info($i) ,我可以看到该值已更改。 有人可以帮助解决上述代码中的问题。

【问题讨论】:

    标签: php arrays laravel


    【解决方案1】:

    你可以尝试添加一个&,这样你就可以loop the array by reference

    foreach ($items as & $i) {
    //                 ^
    //                 |
    //                here
    

    【讨论】:

    • 这是一个已经有很多答案的副本。
    • 是的,你是对的
    【解决方案2】:

    我认为您可以使用集合进行转换。

    transform 方法遍历集合并调用给定的 回调集合中的每个项目。集合中的项目 将被回调返回的值替换:

    旁注

    与大多数其他收集方法不同,transform 修改 收藏本身。如果您希望创建一个新集合,请使用 地图方法。

    $items = Purchase::find($id)->items;
    $items->transform(function($item) {
            $item->itemdesc="test";
            return $item;
        });
    
    info($items);
    

    参考:https://laravel.com/docs/8.x/collections#method-transform

    【讨论】:

      猜你喜欢
      • 2023-03-26
      • 1970-01-01
      • 2023-01-27
      • 2020-09-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-09-01
      • 2019-04-15
      相关资源
      最近更新 更多