O problema está aqui na sua declaração if:
end(array_keys($params['territories']))
Você não pode passar a saída de
array_keys()
por referência, então você deve primeiro atribuí-lo a uma variável para poder passá-lo por referência. Assim:$a = array_keys($params['territories']);
if ($key == end($a)) {
Por que você tem que fazer isso?
Porque
end()
define o ponteiro interno do array para o último elemento, então ele faz isso por referência (você também notará que não precisa atribuir o valor de retorno de end, porque tudo é feito por referência). Então você não pode passar o valor de retorno de array_keys()
por referência, porque você só pode passar o seguinte por referência:- Variáveis, ou seja, foo($a)
- Novas declarações, ou seja, foo(new foobar())
- Referências retornadas de funções, ou seja:
Você pode ler mais sobre a passagem por referência no manual:http://php .net/manual/en/language.references.pass.php