在 PHP 中通过引用传递和使用数组
Passing and using an array by reference in PHP
在 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。
您不需要参数前的"array"关键字。以下代码对我有用:
$arr = array();
function foo(&$arr) {
$arr[] = "error on this line";
$arr[] = "more";
$arr[] = "stuff";
}
foo($arr);
print_r($arr);
输出:
Array ( [0] => error on this line [1] => more [2] => stuff )
编辑:PHP-版本为 5.6
您可以使用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
我刚刚 运行 你的代码并得到了预期的输出,所以我不确定发生了什么。如果 arr
不是一个数组,它就不会通过类型提示,所以它肯定是一个数组。
您可能 运行 PHP < 5.4
<?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 < 5.4:
<?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 函数中,我想将值附加到通过引用传入的数组。例如:
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。
您不需要参数前的"array"关键字。以下代码对我有用:
$arr = array();
function foo(&$arr) {
$arr[] = "error on this line";
$arr[] = "more";
$arr[] = "stuff";
}
foo($arr);
print_r($arr);
输出:
Array ( [0] => error on this line [1] => more [2] => stuff )
编辑:PHP-版本为 5.6
您可以使用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
我刚刚 运行 你的代码并得到了预期的输出,所以我不确定发生了什么。如果 arr
不是一个数组,它就不会通过类型提示,所以它肯定是一个数组。
您可能 运行 PHP < 5.4
<?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 < 5.4:
<?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"
}
*/