Saya memperluas jawaban yang diposting oleh Ethan Kent . Jawaban itu akan membuang argumen non-nol yang mengevaluasi menjadi false karena cara kerja array_filter , yang bukan apa coalesce
fungsi biasanya. Sebagai contoh:
echo 42 === coalesce(null, 0, 42) ? 'Oops' : 'Hooray';
Ups
Untuk mengatasi ini, argumen kedua dan definisi fungsi diperlukan. Fungsi yang dapat dipanggil bertanggung jawab untuk memberi tahu array_filter
apakah akan menambahkan nilai array saat ini ke array hasil atau tidak:
// "callable"
function not_null($i){
return !is_null($i); // strictly non-null, 'isset' possibly not as much
}
function coalesce(){
// pass callable to array_filter
return array_shift(array_filter(func_get_args(), 'not_null'));
}
Akan lebih baik jika Anda bisa melewati isset
atau 'isset'
sebagai argumen ke-2 array_filter
, tetapi tidak beruntung.
??
untuk PHP 7.