players
akan berupa daftar kosong atau koma (atau nilai tunggal). Apa cara termudah untuk memeriksa apakah itu kosong? Saya berasumsi saya bisa melakukannya segera setelah saya mengambil $gameresult
array $gamerow
? Dalam hal ini mungkin akan lebih efisien untuk melewatkan meledak $playerlist
jika itu kosong, tetapi demi argumen, bagaimana saya akan memeriksa apakah sebuah array kosong juga?
$gamerow = mysql_fetch_array($gameresult);
$playerlist = explode(",", $gamerow['players']);
Jawaban:
Jika Anda hanya perlu memeriksa apakah ada elemen APAPUN dalam array
Jika Anda perlu membersihkan nilai kosong sebelum memeriksa (umumnya dilakukan untuk mencegah
explode
string aneh):sumber
empty()
.if(!isset($emptyarray))
adalahfalse
namunif(empty($emptyarray))
kembalitrue
. Itu baru saja memaku sayaArray kosong adalah falsey dalam PHP, jadi Anda bahkan tidak perlu menggunakan
empty()
seperti yang disarankan orang lain.PHP
empty()
menentukan apakah variabel tidak ada atau memiliki nilai falsey (sepertiarray()
,0
,null
,false
, dll).Dalam kebanyakan kasus, Anda hanya ingin memeriksa
!$emptyVar
. Gunakanempty($emptyVar)
jika variabel mungkin belum disetel DAN Anda tidak ingin memicuE_NOTICE
; IMO ini umumnya merupakan ide yang buruk.sumber
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:
Jika Anda mengulangi kunci dan nilai array untuk array di atas, Anda mendapatkan yang berikut:
Dan menguji array di atas dengan
empty()
mengembalikan hasil berikut:Array akan selalu kosong ketika Anda menetapkan array tetapi tidak menggunakannya setelah itu, seperti:
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.
Menjalankan
array_filter()
ketiga contoh array (dibuat di blok kode pertama dalam jawaban ini) menghasilkan sebagai berikut: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()
danforeach
memeriksa jika nilai ditemukan.Tentunya tolok ukur harus pada berbagai parameter, pada array kecil dan besar dan ketika ada nilai dan tidak dll.
sumber
array_filter()
count(array())==0
salah ketika ada kunci dan tidak ada nilai, jadi ini tidak membantu dalam memeriksa nilai saja. Pernyataan Anda benar, tetapi Anda memaksa tes dengancount(array())
karena array tentu saja kosong. Kita perlu memeriksa kapan array telah kembali dari formulir atau tempat lain untuk mengetahui apakah array itu kosong (kunci / nilai) atau hanya memiliki nilai atau tidakarray_filter($_FILES["documento"]['name'])
count($gamerow['players'])
akan menjadi 0.sumber
Jika Anda ingin memastikan apakah variabel yang Anda uji sebenarnya adalah array kosong, Anda bisa menggunakan sesuatu seperti ini:
sumber
Jika Anda ingin mengecualikan baris palsu atau kosong (seperti
0 => ''
), di mana penggunaanempty()
akan gagal, Anda dapat mencoba:Jika Anda ingin menghapus semua NULL, FALSE dan string kosong (
''
), tetapi meninggalkan nilai nol (0
), Anda dapat menggunakanstrlen
sebagai panggilan balik, misalnya:sumber
Mengapa tidak ada yang mengatakan jawaban ini:
sumber
array()
hal yang sama.is_array
sumber
explode()
- ia mengembalikan data tipe array. Memeriksaempty()
adalah panggilan fungsi yang tidak dibutuhkan. Seperti yang dinyatakan oleh Cobby pada tahun 2012,if($detect)
adalah semua yang diperlukan. Solusi ini tidak boleh diterapkan untuk tugas ini atau orang lain. Anda mungkin berpendapat bahwa Anda sedang meliput situasi di luar ruang lingkup pertanyaan ini, yah, tidak pernah ada kebutuhan untuk memanggilempty()
SETELAHis_array()
karena jika variabel tidak "diatur", makais_array()
akan menghasilkan "Pemberitahuan: Variabel tidak terdefinisi", jikaisset()
kemudianempty()
berlebihan, cukup gunakan Jawaban Cobby.Saya menjalankan patokan yang disertakan pada akhir posting. Untuk membandingkan metode:
count($arr) == 0
: hitungempty($arr)
: kosong$arr == []
: comp(bool) $arr
: Pemerandan mendapat hasil sebagai berikut
Perbedaan antara kosong dan casting ke boolean tidak signifikan. Saya telah menjalankan tes ini beberapa kali dan tampaknya pada dasarnya setara. Isi array tampaknya tidak memainkan peran penting. Keduanya menghasilkan hasil yang berlawanan tetapi negasi logis hampir tidak cukup untuk mendorong casting untuk memenangkan sebagian besar waktu jadi saya pribadi lebih suka kosong demi keterbacaan dalam kedua kasus.
sumber
sizeof
alias [bukan?] Yang mana dariempty
... stackoverflow.com/a/51986794/1429432jika Anda ingin memeriksa konten array yang dapat Anda gunakan:
lihat di sini: http://codepad.org/EORE4k7v
sumber
Menurut pendapat saya, cara paling sederhana untuk array yang diindeks adalah:
Kondisi 'jika' pada array akan bernilai true jika array tidak kosong dan salah jika array kosong . Ini tidak berlaku untuk array asosiatif.
sumber
Saya menggunakan kode ini
Tetapi perhatikan bahwa jika array memiliki sejumlah besar kunci, kode ini akan menghabiskan banyak waktu untuk menghitungnya, dibandingkan dengan jawaban lain di sini.
sumber
Anda dapat menggunakan
array_filter()
yang berfungsi baik untuk semua situasi:sumber
sumber
Saya pikir cara terbaik untuk menentukan apakah array kosong atau tidak adalah dengan menggunakan count () seperti:
sumber
count()
panggilan dapat dihapus sepenuhnya - lihat jawaban Cobby ini.Membuat keputusan yang paling tepat membutuhkan mengetahui kualitas data Anda dan proses apa yang harus diikuti.
Jika Anda akan mendiskualifikasi / mengabaikan / menghapus baris ini, maka titik penyaringan paling awal harus ada dalam permintaan mysql.
WHERE players IS NOT NULL
WHERE players != ''
WHERE COALESCE(players, '') != ''
WHERE players IS NOT NULL AND players != ''
Jika Anda tidak 100% yakin apakah kolom akan ada di set hasil, maka Anda harus memeriksa bahwa kolom tersebut dinyatakan. Ini berarti memanggil
array_key_exists()
,isset()
atauempty()
pada kolom. Saya tidak akan repot-repot menggambarkan perbedaan di sini (ada halaman SO lainnya untuk gangguan itu, ini awal: 1 , 2 , 3 ). Yang mengatakan, jika Anda tidak sepenuhnya mengendalikan set hasil, maka mungkin Anda memiliki "fleksibilitas" aplikasi yang berlebihan dan harus memikirkan kembali jika masalah yang berpotensi mengakses data kolom yang tidak ada sepadan. Secara efektif, saya mengatakan bahwa Anda tidak perlu memeriksa apakah kolom dinyatakan - ergo Anda seharusnya tidak perluempty()
untuk tugas ini. Jika ada yang memperdebatkan ituempty()
lebih tepat, maka mereka mendorong pendapat pribadi mereka sendiri tentang ekspresifitas scripting. Jika Anda menemukan kondisi di # 5 di bawah ini ambigu, tambahkan komentar inline ke kode Anda - tetapi saya tidak akan melakukannya. Intinya adalah bahwa tidak ada keuntungan pemrograman untuk membuat pemanggilan fungsi.Mungkinkah nilai string Anda mengandung nilai
0
yang ingin Anda anggap benar / valid / tidak kosong? Jika demikian, maka Anda hanya perlu memeriksa apakah nilai kolom memiliki panjang.Ini Demo yang digunakan
strlen()
. Ini akan menunjukkan apakah string akan membuat elemen array yang bermakna jika meledak.Saya pikir penting untuk menyebutkan bahwa dengan meledak tanpa syarat, Anda DIJAMIN untuk menghasilkan array yang tidak kosong. Ini buktinya: Demo Dengan kata lain, memeriksa apakah array kosong sama sekali tidak berguna - itu akan kosong setiap saat.
Jika string Anda TIDAK MUNGKIN mengandung nilai nol (karena, katakanlah, ini adalah csv yang terdiri dari id yang dimulai dari
1
dan hanya kenaikan), maka hanyaif ($gamerow['players']) {
itu yang Anda butuhkan - akhir cerita.... tapi tunggu, apa yang Anda lakukan setelah menentukan kekosongan nilai ini? Jika Anda memiliki skrip down yang menunggu
$playerlist
, tetapi Anda menyatakan variabel secara kondisional, maka Anda berisiko menggunakan nilai baris sebelumnya atau sekali lagi menghasilkan Pemberitahuan. Jadi, apakah Anda perlu mendeklarasikan tanpa syarat$playerlist
sebagai sesuatu ? Jika tidak ada nilai kebenaran dalam string, apakah aplikasi Anda mendapat manfaat dari mendeklarasikan array kosong? Kemungkinannya adalah, jawabannya adalah ya. Dalam hal ini, Anda dapat memastikan bahwa variabel adalah tipe array dengan kembali ke array kosong - dengan cara ini tidak masalah jika Anda memasukkan variabel tersebut ke dalam sebuah loop. Deklarasi bersyarat berikut semuanya setara.$playerlist = $gamerow['players'] ? explode(',', $gamerow['players']) : [];
Mengapa saya harus berusaha keras untuk menjelaskan tugas yang sangat mendasar ini?
sumber
sumber
$matches = preg_grep ( "/^$text (\w+)/i" , $array ) ;
untuk memeriksanya saya gunakanif ( count ( $matches ) > 0 )
empty()
melakukan terlalu banyak pekerjaan.Saya telah memecahkan masalah ini dengan kode berikut.
sumber
Ini sepertinya berfungsi untuk semua kasus
sumber
Bagaimana tentang:
sumber