В функции 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
Я не уверен, что у меня есть параметр, определенный правильно, или если это вообще возможно. Поиск в Google до сих пор не дал никаких сопоставимых примеров.
РЕДАКТИРОВАТЬ: PHP версия 5.1.6.
Я просто запустил ваш код и получил ожидаемый результат, так что я не уверен, что происходит. Если 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"}
*/
Вы можете использовать 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 = 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