【问题标题】:Passing and using an array by reference in PHP [closed]在PHP中通过引用传递和使用数组[关闭]
【发布时间】:2015-10-27 10:03:21
【问题描述】:

在 PHP 函数中,我想将值附加到通过引用传入的数组中。例如:

function foo(array &$arr) {
    $arr[] = "error on this line";
    $arr[] = "more";
    $arr[] = "stuff";
}

当我尝试将某些内容附加到数组时遇到的错误是

PHP Parse error:  syntax error, unexpected ']', expecting T_STRING or T_VARIABLE or T_NUM_STRING in somefile.class.php on line xxx

我不确定我是否正确定义了参数,或者这是否可能。到目前为止,谷歌搜索还没有找到任何可比的例子。

编辑:PHP 版本 5.1.6。

【问题讨论】:

  • $arr 是否声明为数组?
  • 我试过这个功能,它可以正常工作
  • 您的示例函数工作得很好。请将您的示例代码扩展为可重现的错误。
  • 我无法重现 5.1.6 的错误,sandbox.onlinephpfunctions.com/code/…。
  • 在导致解析错误之前看起来像一个错误十几行。但我很高兴知道 array_push()。

标签: php arrays pass-by-reference php-parse-error


【解决方案1】:

我刚刚运行了您的代码并得到了预期的输出,所以我不确定发生了什么。如果arr 不是一个数组,它就不会传递类型提示,所以它肯定是一个数组。

您可能正在运行 PHP

<?php

function foo(array &$arr) {
    $arr[] = "error on this line";
    $arr[] = "more";
    $arr[] = "stuff";
}

$a = ["initial"];

foo($a);

var_dump($a);

/*
array(4) {
  [0] =>
  string(7) "initial"
  [1] =>
  string(18) "error on this line"
  [2] =>
  string(4) "more"
  [3] =>
  string(5) "stuff"
}
*/

对于 PHP

<?php

function foo(array &$arr) {
    array_push($arr, "error on this line");
    array_push($arr, "more");
    array_push($arr, "stuff");
}

$a = array("initial");

foo($a);

var_dump($a);

/*
array(4) {
  [0] =>
  string(7) "initial"
  [1] =>
  string(18) "error on this line"
  [2] =>
  string(4) "more"
  [3] =>
  string(5) "stuff"
}
*/

【讨论】:

  • PHP
  • 这就是我想要表达的全部观点。只是忘了更改初始化部分(已编辑)。
  • 另外,您不需要array_push,因为$arr[] = 是有效的PHP 5.3 语法。
  • 原来我在 5.1.6 上。
【解决方案2】:

你可以使用array_push

//The argument '$arr' is declared to be passed by reference, 
 array_push($arr, &$r); 

您可以在此处查看详细信息: http://php.net/manual/en/language.references.pass.php

【讨论】:

    【解决方案3】:

    您不需要在参数之前使用“array”关键字。以下代码适用于我:

    $arr = array();
    
    function foo(&$arr) {
        $arr[] = "error on this line";
        $arr[] = "more";
        $arr[] = "stuff";
    }
    
    foo($arr);
    
    print_r($arr);
    

    输出:

    Array ( [0] =&gt; error on this line [1] =&gt; more [2] =&gt; stuff )

    编辑:PHP 版本是 5.6

    【讨论】:

    • FWIW:虽然确实不需要在 php 中使用类型提示,但这与问题中的错误无关。 (我确信它也适用于你的 php with 单词“array”,所以这并没有告诉我们为什么它对提问的人不起作用。)跨度>
    猜你喜欢
    • 2012-03-01
    • 2015-07-04
    • 2011-05-24
    • 1970-01-01
    • 2021-12-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-06-09
    相关资源
    最近更新 更多