【问题标题】:Error in hierarchical php function exectuion! What's this?分层 php 函数执行错误!这是什么?
【发布时间】:2012-06-02 03:23:16
【问题描述】:

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

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

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

【问题讨论】:

  • 如果您的第一个问题是询问工具是否存在错误,答案可能是否定的。
  • 另外,打印你得到的 what 输出会很有帮助。
  • @Vishal,编辑您的问题以将示例输出放入。
  • 谢谢,我用输出更新了问题。

标签: php arrays function hierarchical


【解决方案1】:

这是因为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 )

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

在第二种情况下,array_unique() 的输出将是相同的,但此临时值未分配给变量,因此在调用 array_pop 后它会被遗忘。

值得注意的是,在 PHP(与 C++ 不同)中,passing by reference is actually slower than passing by value 仅用于修改函数的输入参数。

【讨论】:

  • 这是真的@therefromhere !感谢您的帮助!终于明白了:)
  • 是的,我知道通过引用传递很慢,而且我很少使用它。默认情况下使用上面的case1!
【解决方案2】:

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

【讨论】:

    猜你喜欢
    • 2016-07-03
    • 2011-09-13
    • 1970-01-01
    • 2019-09-17
    • 1970-01-01
    • 2018-02-06
    • 2011-01-06
    • 1970-01-01
    • 2013-08-21
    相关资源
    最近更新 更多