Beberapa jawaban yang layak, tetapi hanya berpikir saya akan memperluas sedikit untuk menjelaskan lebih jelas ketika PHP menentukan apakah array kosong.
Catatan Utama:
Array dengan kunci (atau kunci) akan ditentukan sebagai TIDAK kosong oleh PHP.
Karena nilai array memerlukan kunci untuk ada, memiliki nilai atau tidak dalam array tidak menentukan apakah itu kosong, hanya jika tidak ada kunci (DAN karenanya tidak ada nilai).
Jadi memeriksa array dengan empty()tidak hanya memberi tahu Anda apakah Anda memiliki nilai atau tidak, itu memberi tahu Anda jika array kosong, dan kunci adalah bagian dari array.
Jadi pertimbangkan bagaimana Anda menghasilkan array Anda sebelum memutuskan metode pemeriksaan mana yang akan digunakan.
EG Sebuah array akan memiliki kunci ketika pengguna mengirimkan formulir HTML Anda ketika setiap bidang formulir memiliki nama array (yaitu name="array[]").
Sebuah non kosong array akan diproduksi untuk setiap bidang karena akan ada otomatis bertambah nilai-nilai kunci untuk array setiap form lapangan.
Ambil contoh array ini:
/* Assigning some arrays */
// Array with user defined key and value
$ArrayOne = array("UserKeyA" => "UserValueA", "UserKeyB" => "UserValueB");
// Array with auto increment key and user defined value
// as a form field would return with user input
$ArrayTwo[] = "UserValue01";
$ArrayTwo[] = "UserValue02";
// Array with auto incremented key and no value
// as a form field would return without user input
$ArrayThree[] = '';
$ArrayThree[] = '';
Jika Anda mengulangi kunci dan nilai array untuk array di atas, Anda mendapatkan yang berikut:
ARRAY ONE:
[UserKeyA] => [UserValueA]
[UserKeyB] => [UserValueB]
ARRAY DUA:
[0] => [UserValue01]
[1] => [UserValue02]
ARRAY THREE:
[0] => []
[1] => []
Dan menguji array di atas dengan empty()mengembalikan hasil berikut:
SATU ARRAY:
$ ArrayOne tidak kosong
ARRAY DUA:
$ ArrayTwo tidak kosong
ARRAY THREE:
$ ArrayThree tidak kosong
Array akan selalu kosong ketika Anda menetapkan array tetapi tidak menggunakannya setelah itu, seperti:
$ArrayFour = array();
Ini akan kosong, yaitu PHP akan mengembalikan BENAR saat menggunakan jika empty()di atas.
Jadi jika array Anda memiliki kunci - baik dengan misalnya nama input formulir atau jika Anda menetapkannya secara manual (yaitu membuat array dengan nama kolom basis data sebagai kunci tetapi tidak ada nilai / data dari database), maka array tersebut TIDAK akan empty().
Dalam hal ini, Anda bisa mengulang array dalam foreach, menguji apakah setiap kunci memiliki nilai. Ini adalah metode yang baik jika Anda perlu menjalankan array, mungkin memeriksa kunci atau membersihkan data.
Namun itu bukan metode terbaik jika Anda hanya perlu tahu "jika ada nilai" mengembalikan BENAR atau SALAH . Ada berbagai metode untuk menentukan apakah sebuah array memiliki nilai ketika ia tahu itu akan memiliki kunci. Fungsi atau kelas mungkin merupakan pendekatan terbaik, tetapi seperti biasa itu tergantung pada lingkungan Anda dan persyaratan yang tepat, serta hal-hal lain seperti apa yang saat ini Anda lakukan dengan array (jika ada).
Berikut ini pendekatan yang menggunakan kode sangat sedikit untuk memeriksa apakah array memiliki nilai:
Menggunakan array_filter():
Iterasikan setiap nilai dalam array yang meneruskannya ke fungsi panggilan balik. Jika fungsi panggilan balik kembali benar, nilai saat ini dari array dikembalikan ke array hasil. Kunci array dipertahankan.
$EmptyTestArray = array_filter($ArrayOne);
if (!empty($EmptyTestArray))
{
// do some tests on the values in $ArrayOne
}
else
{
// Likely not to need an else,
// but could return message to user "you entered nothing" etc etc
}
Menjalankan array_filter()ketiga contoh array (dibuat di blok kode pertama dalam jawaban ini) menghasilkan sebagai berikut:
ARRAY ONE:
$ arrayone tidak kosong
ARRAY DUA:
$ arraytwo tidak kosong
ARRAY THREE:
$ arraythree kosong
Jadi ketika tidak ada nilai, apakah ada kunci atau tidak, gunakan array_filter()untuk membuat array baru dan kemudian periksa apakah array baru kosong menunjukkan apakah ada nilai dalam array asli.
Ini tidak ideal dan sedikit berantakan, tetapi jika Anda memiliki array yang besar dan tidak perlu mengulanginya karena alasan lain, maka ini adalah yang paling sederhana dalam hal kode yang diperlukan.
Saya tidak berpengalaman dalam memeriksa overhead, tetapi akan lebih baik untuk mengetahui perbedaan antara menggunakan array_filter()dan foreachmemeriksa jika nilai ditemukan.
Tentunya tolok ukur harus pada berbagai parameter, pada array kecil dan besar dan ketika ada nilai dan tidak dll.