Problem tkwi w twoim oświadczeniu if:
end(array_keys($params['territories']))
Nie możesz przekazać wyjścia array_keys()
przez referencję, więc musisz najpierw przypisać ją do zmiennej, aby móc przekazać ją przez referencję. Tak:
$a = array_keys($params['territories']);
if ($key == end($a)) {
Dlaczego musisz to zrobić?
Ponieważ end()
ustawia wewnętrzny wskaźnik tablicy na ostatni element, więc robi to przez referencję (zauważysz też, że nie musisz przypisywać wartości zwracanej przez end, ponieważ wszystko odbywa się przez referencję). Więc nie możesz przekazać wartości zwracanej przez array_keys()
przez odniesienie, ponieważ przez odniesienie można przekazać tylko następujące elementy:
- Zmienne, np. foo($a)
- Nowe instrukcje, np. foo(new foobar())
- Odwołania zwrócone z funkcji, np.:
Możesz przeczytać więcej o przekazywaniu przez odniesienie w podręczniku:http://php .net/manual/en/language.references.pass.php