Laravel集合在地图内递增不可能使用箭头功能



我试图在map方法中进行增量,但我的变量似乎没有保存新值。我的代码:

$position = 0;
$statement = $medias->map(fn(string $media) => [
'position' => ++$position
])->values();

我的预期结果是:

#items: array:4 [
0 => array:4 [
"position" => 1
]
1 => array:4 [
"position" => 2
]
2 => array:4 [
"position" => 3
]
3 => array:4 [
"position" => 4
]
]

然而它实际上是

#items: array:4 [
0 => array:4 [
"position" => 1
]
1 => array:4 [
"position" => 1
]
2 => array:4 [
"position" => 1
]
3 => array:4 [
"position" => 1
]
]

map内部递增是不可能的,还是我在这里做错了什么?

这里的问题是您希望$position变量通过引用传递,但事实并非如此。

值变量绑定使用的箭头函数。这大致相当于对箭头函数中使用的每个变量$x执行一次使用($x(。按值绑定意味着不可能修改外部范围中的任何值。匿名函数可以用于by-ref绑定。PHP手册-箭头函数

您的解决方法可能如下:

// Either
$posObj = new stdClass();
$posObj->position = 0;
// or
$posObj = (object)array('position' => 0);
$statement = $medias->map(fn(string $media) => [
'position' => ++$posObj->position
])->values();

最新更新