提问人:caijw 提问时间:4/11/2023 最后编辑:mickmackusacaijw 更新时间:4/11/2023 访问量:80
赋值运算符任一端函数的执行顺序
Order of execution for functions on either side of the assignment operator
问:
我想实现一个函数
$input = ['key1', 'value1', 'key2', 'value2'];
// $output = ['key1' => 'value1', 'key2' => 'value2'];
$output=[];
do {
$output[current($input)] = next($input);
} while (next($input));
我凭直觉写了这段代码,但是当我今天回顾这段代码时,我思考这是否可能是一个错误。
我假设输出应该是这样的:
['value1'=>'value1','value2'=>'value2']
因为优先于 ,但这个函数在 PHP8 中工作正常。next()
current()
为什么会这样?分配不是从右到左吗?
答:
2赞
nice_dev
4/11/2023
#1
对于您的情况,关联性从左到右。您可以使用以下代码片段进行交叉检查,其中首先打印而不是 .=
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
评论
1赞
caijw
4/11/2023
首先,谢谢你回答我关于谁先执行的问题,也许我把分配顺序和执行顺序混淆了其次,对不起,我对描述有问题。我想要的结果是 ['key'=>'value'],但我在标题中提到的只是我认为这段代码的执行结果应该是 ['value'=> 'value'] @mickmackusa
0赞
nice_dev
4/11/2023
@caijw 很公平。我删除了不相关的部分。
评论
array_column(array_chunk($input
, 2), 1, 0) 和销毁密钥:array_column(array_chunk($input, 2), 1, 1)