Проблемът е тук във вашия оператор if:
end(array_keys($params['territories']))
Не можете да подадете изхода на array_keys()
по препратка, така че първо трябва да го присвоите на променлива, за да можете да го предадете по препратка. Като това:
$a = array_keys($params['territories']);
if ($key == end($a)) {
Защо трябва да правите това?
Тъй като end()
задава вътрешния указател на масива към последния елемент, така че прави това чрез препратка (ще забележите също, че не е нужно да присвоявате върнатата стойност на end, защото всичко се прави чрез препратка). Така че не можете да подадете върнатата стойност на array_keys()
по препратка, защото можете да подадете следното само по препратка:
- Променливи, т.е. foo($a)
- Нови изрази, т.е. foo(new foobar())
- Препратки, върнати от функции, т.е.:
Можете да прочетете повече за предаването чрез препратка в ръководството:http://php .net/manual/en/language.references.pass.php