我想实现一个功能
$input = ['key1', 'value1', 'key2', 'value2'];
// $output = ['key1' => 'value1', 'key2' => 'value2'];
$output=[];
do {
$output[current($input)] = next($input);
} while (next($input));
我凭直觉写了这段代码,但是今天review这段代码的时候,我在想这会不会是一个bug。
我假设输出应该是这样的:
['value1'=>'value1','value2'=>'value2']
因为
next()
优先于current()
,但是这个函数在PHP8中运行良好。
这是为什么?赋值不是从右到左吗?
对于
=
您的情况,关联性是从左到右。您可以使用下面的代码片段进行交叉检查,其中先打印t1
而不是t2
.
<?php
$output=[];
$output[test('t1')] = test('t2');
function test($str){
echo $str,PHP_EOL;
return rand(10, 100);
}
因此,您的输出是
[ 'key1' => 'value1','key2' => 'value2']
,因为 current()
给出 key1
和 next()
推进内部数组指针并返回元素值,即 value1
并且重复相同的操作直到数组完全循环。