分层php函数exectuion出错!这是什么?

Vis*_*hal 2 php arrays function hierarchical

为什么我在以下两种情况下通过print_r得到不同的输出!! 这是php中的一个错误?php无法执行称为内部函数的复杂层次函数吗?

CASE 1 :
$aa='2,3,4,5,5,5,';
$aa=array_unique(explode(',',$aa));
array_pop($aa);
print_r($aa);

CASE 2 :
$aa='2,3,4,5,5,5,';
array_pop(array_unique(explode(',',$aa)));
print_r($aa)
Run Code Online (Sandbox Code Playgroud)

在第一种情况下,输出是爆炸数组:

Array ( [0] => 2 [1] => 3 [2] => 4 [3] => 5 ) 
Run Code Online (Sandbox Code Playgroud)

在第二种情况下,输出是字符串:

2,3,4,5,5,5,
Run Code Online (Sandbox Code Playgroud)

Joh*_*ter 7

这是因为array_pop改变了它的输入,并且你传递了一个临时变量(不是$aa).

请注意文档中的签名:array_pop ( array &$array )- &表示它通过引用获取参数,并且它会更改该输入变量.

与其他两个功能相比:

array explode ( string $delimiter , string $string , int $limit )

array array_unique ( array $array , int $sort_flags = SORT_STRING )

在第一种情况下,您$aa使用输出更新array_unique(),然后将其传递array_pop给要更改.

在第二种情况下,输出array_unique()将是相同的,但是这个临时值没有分配给变量,因此在array_pop被调用之后它被遗忘了.

值得注意的是,在PHP中(与C++不同),通过引用传递实际上比传递值,因此仅用于修改函数的输入参数.