我试图在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();