Le problème est ici dans votre instruction if :
end(array_keys($params['territories']))
Vous ne pouvez pas transmettre la sortie de array_keys()
par référence, vous devez donc d'abord l'affecter à une variable pour pouvoir la passer par référence. Comme ceci :
$a = array_keys($params['territories']);
if ($key == end($a)) {
Pourquoi tu dois faire ça ?
Parce que end()
définit le pointeur interne du tableau sur le dernier élément, il le fait donc par référence (vous remarquerez également que vous n'avez pas à affecter la valeur de retour de end, car tout est fait par référence). Vous ne pouvez donc pas passer la valeur de retour de array_keys()
par référence, car vous ne pouvez passer que par référence :
- Variables, par exemple foo($a)
- Nouvelles instructions, par exemple foo(new foobar())
- Références renvoyées par les fonctions, c'est-à-dire :
Vous pouvez en savoir plus sur le passage par référence dans le manuel :http://php .net/manual/en/language.references.pass.php