Передача и использование массива по ссылке в переполнении стека

В функции 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.

-1

Решение

Я просто запустил ваш код и получил ожидаемый результат, так что я не уверен, что происходит. Если 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"}
*/
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

1

Ты не необходимость ключевое слово «массив» перед параметром. У меня работает следующий код:

$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

0
По вопросам рекламы [email protected]