Problém je zde ve vašem příkazu if:
end(array_keys($params['territories']))
Nemůžete předat výstup array_keys()
odkazem, takže jej musíte nejprve přiřadit proměnné, abyste jej mohli předat odkazem. Takhle:
$a = array_keys($params['territories']);
if ($key == end($a)) {
Proč to musíte udělat?
Protože end()
nastaví vnitřní ukazatel pole na poslední prvek, takže to udělá odkazem (také si všimnete, že nemusíte přiřazovat návratovou hodnotu end, protože se to vše provádí odkazem). Nemůžete tedy předat návratovou hodnotu array_keys()
odkazem, protože odkazem můžete předat pouze následující:
- Proměnné, tj. foo($a)
- Nové příkazy, tj. foo(new foobar())
- Reference vrácené z funkcí, tj.:
Více o předávání odkazem si můžete přečíst v manuálu:http://php .net/manual/en/language.references.pass.php