我想实现一个函数
$input = ['key1', 'value1', 'key2', 'value2'];
// $output = ['key1' => 'value1', 'key2' => 'value2'];
$output=[];
do {
$output[current($input)] = next($input);
} while (next($input));
我是凭直觉写这段代码的,但是当我今天回顾这段代码时,我想这可能是一个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
,并且重复了相同的操作,直到数组完全循环。