2

为什么我在以下两种情况下通过 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)

在第一种情况下,输出是一个分解数组:

Array ( [0] => 2 [1] => 3 [2] => 4 [3] => 5 ) 

在第二种情况下,输出是 string :

2,3,4,5,5,5,
4

2 回答 2

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++ 不同)中,按引用传递实际上比按值传递要慢,因此仅用于修改函数的输入参数。

于 2012-05-27T10:15:28.573 回答
0

在第一种情况下,您更改变量,如第 2 行 bs 使用赋值运算符 = 分配一个新值

于 2012-05-27T10:19:57.027 回答