Masalahnya ada di sini dalam pernyataan if Anda:
end(array_keys($params['territories']))
Anda tidak dapat meneruskan output array_keys()
dengan referensi, jadi Anda harus terlebih dahulu menetapkannya ke variabel untuk dapat meneruskannya dengan referensi. Seperti ini:
$a = array_keys($params['territories']);
if ($key == end($a)) {
Mengapa Anda harus melakukan ini?
Karena end()
menyetel penunjuk internal larik ke elemen terakhir, jadi ia melakukannya dengan referensi (Anda juga akan melihat bahwa Anda tidak harus menetapkan nilai kembalian akhir, karena semuanya dilakukan dengan referensi). Jadi Anda tidak dapat melewatkan nilai kembalian array_keys()
dengan referensi, karena Anda hanya dapat meneruskan yang berikut ini dengan referensi:
- Variabel, mis. foo($a)
- Pernyataan baru, mis. foo(new foobar())
- Referensi yang dikembalikan dari fungsi, yaitu:
Anda dapat membaca lebih lanjut tentang passing by reference di manual:http://php .net/manual/en/language.references.pass.php