Sebut saja kesimpulannya: kosong adalah yang paling berkesan.
kira perlu mengira panjang tatasusunan dahulu dan kemudian membuat pertimbangan.
Sesetengah balasan menunjukkan bahawa ini tidak betul
Saya selalu berfikir bahawa kerumitan masa kiraan ialah O(n) Selepas saya ditampar di muka kali ini, saya membaca kod asal dan mendapati ia sebenarnya O(1).
kira pautan kod sumber
fungsi kiraan beroperasi pada tatasusunan:
case IS_ARRAY:
RETURN_LONG (php_count_recursive (array, mode TSRMLS_CC) )
Mari kita lalui operasi php_count_recursive, dan kemudian lihat operasi fungsi php_count_recursive pada tatasusunan: cnt = zend_hash_num_elements(Z_ARRVAL_P(array));
zend_hash_num_elements kod:
ZEND_API int zend_hash_num_elements(HashTable *ht)
{
IS_CONSISTENT(ht);
return ht->nNumOfElements;
}
isset hanya boleh mengesan sama ada pembolehubah ditakrifkan atau mempunyai nilai NULL. Jika pembolehubah ditakrifkan dahulu, !$array adalah bersamaan dengan kosong. Kecekapan juga sama.
isset Saya tidak akan menjawab jika saya tidak dapat memberitahu Ini adalah pengetahuan asas tentang PHP >kira Perbezaan isset不能判断我就不回答了,这是PHP基础知识,看手册去 下面主要讲empty和count的区别
根据PHP的源代码(PHP5.4)
typedef struct _HashTable
{
int size;
int elem_num;
Bucket** buckets;
} HashTable;
Empty empty() 0.118691
Empty count() 0.218974
Full empty() 0.133747
Full count() 0.216424
IF empty empty() 0.166474
IF empty count() 0.235922
IF full empty() 0.120642
IF full count() 0.248273
OR empty empty() 0.123875
OR empty count() 0.258665
OR full empty() 0.157839
OR full count() 0.224869
IF/ELSE empty empty() 0.167004
IF/ELSE empty count() 0.263351
IF/ELSE full empty() 0.145794
IF/ELSE full count() 0.248425
( ? : ) empty empty() 0.169487
( ? : ) empty count() 0.265701
( ? : ) full empty() 0.149847
( ? : ) full count() 0.252891
Dalam pelaksanaan, sama ada kosong atau count, HashTable yang ditunjuk oleh zVal - value diambil . elem_num dalam struktur
Dalam jawapan lain, dikatakan bahawa count perlu mengira panjangnya, PHP boleh jadi begitu bodoh? Jika anda bodoh menjalankan senarai terpaut sekali lagi, count akan terus mengembalikan elem_num
tatasusunan.
Kesimpulan
🎜Jadi tiada perbezaan antara dua kaedah penghakiman🎜, kosong adalah untuk melaksanakan elem_num <= 0, kerana kedua-duanya melaksanakan kod asas yang sama, tetapi ia tidak bermakna kelajuan pelaksanaan adalah sama. 🎜
🎜Perbezaan kelajuan🎜
🎜Menurut keputusan ujian dalam http://stackoverflow.com/ques... (keputusan ujian ada di bawah), anda akan mendapati bahawa count memang lebih perlahan daripada kosong Satu perkara, anda mungkin tertanya-tanya, kerana semuanya dinilai elem_num, mengapa ia perlahan? 🎜
🎜Kenapa lambat🎜
🎜Mengikut manual PHP: 🎜
🎜Ada baris untuk menerangkan kosong: 🎜
🎜Oleh kerana ia adalah pembina bahasa dan bukannya fungsi, ia tidak boleh dipanggil oleh fungsi pembolehubah. 🎜
🎜Jadi hasilnya adalah jelas: count ialah fungsi, tetapi kosong ialah pembina bahasa Memandangkan ia adalah bahasa pembina , kecekapan pelaksanaan pasti lebih tinggi daripada fungsi Sebagai contoh, echo juga merupakan pembina bahasa, 🎜.
🎜Sebagai contoh, echo 'str1','str2'; lebih cekap daripada echo 'str1'.'str2';, apatah lagi print kod > 🎜
🎜🎜Tetapi🎜, selepas menggunakan OpCache atau JIT, tiada perbezaan antara keduanya (lihat di bawah), kerana kedua-duanya telah dioptimumkan. 🎜
🎜PHP asli🎜
Empty empty() 0.210652
Empty count() 0.212123
Full empty() 0.206016
Full count() 0.204722
IF empty empty() 0.227852
IF empty count() 0.219821
IF full empty() 0.220823
IF full count() 0.221397
OR empty empty() 0.218813
OR empty count() 0.220105
OR full empty() 0.229118
OR full count() 0.221787
IF/ELSE empty empty() 0.221499
IF/ELSE empty count() 0.221274
IF/ELSE full empty() 0.221879
IF/ELSE full count() 0.228737
( ? : ) empty empty() 0.224143
( ? : ) empty count() 0.222459
( ? : ) full empty() 0.221606
( ? : ) full count() 0.231288
isset tidak dapat menentukan sama ada tatasusunan itu kosong
Dua yang lain: http://stackoverflow.com/ques...
Kesimpulannya ialah kosong lebih cekap daripada mengira
Sebut saja kesimpulannya: kosong adalah yang paling berkesan.
kira perlu mengira panjang tatasusunan dahulu dan kemudian membuat pertimbangan.kira pautan kod sumber
fungsi kiraan beroperasi pada tatasusunan:
Mari kita lalui operasi php_count_recursive, dan kemudian lihat operasi fungsi php_count_recursive pada tatasusunan:
cnt = zend_hash_num_elements(Z_ARRVAL_P(array));
zend_hash_num_elements kod:
isset hanya boleh mengesan sama ada pembolehubah ditakrifkan atau mempunyai nilai NULL.
Jika pembolehubah ditakrifkan dahulu, !$array adalah bersamaan dengan kosong. Kecekapan juga sama.
isset
Saya tidak akan menjawab jika saya tidak dapat memberitahu Ini adalah pengetahuan asas tentang PHP >kira Perbezaanisset
不能判断我就不回答了,这是PHP基础知识,看手册去下面主要讲
empty
和count
的区别根据PHP的源代码(PHP5.4)
在实现中,不论是
empty
,还是count
,都是取的zVal - value
指向的HashTable
结构中的elem_num
结论
所以两者之间的判断方式是没任何差距的,
empty
就是执行了elem_num <= 0
,既然两者都是执行相同底层代码,但是不代表执行速度一样。速度差异
根据http://stackoverflow.com/ques...中的测试结果来看(测试结果在下方),大家会发现
count
的确要比empty
慢一点,也许大家会疑惑,既然都是判断的elem_num
,那么为什么会慢?为什么慢
所以结果很明显了:
count
是函数,empty
却是一个语言构造器
既然是
语言构造器
,那执行效率是肯定比函数高的,比如echo
也是语言构造器
,比如
Berdasarkan kod sumber PHP (PHP5.4)echo 'str1','str2';
的效率就比echo 'str1'.'str2';
高,更不用说print
kosong
ataucount
,HashTable
yang ditunjuk olehzVal - value
diambil .elem_num
dalam struktur tatasusunan. Kesimpulankosong
adalah untuk melaksanakanelem_num <= 0
, kerana kedua-duanya melaksanakan kod asas yang sama, tetapi ia tidak bermakna kelajuan pelaksanaan adalah sama. 🎜 🎜Perbezaan kelajuan🎜 🎜Menurut keputusan ujian dalam http://stackoverflow.com/ques... (keputusan ujian ada di bawah), anda akan mendapati bahawacount
memang lebih perlahan daripadakosong
Satu perkara, anda mungkin tertanya-tanya, kerana semuanya dinilaielem_num
, mengapa ia perlahan? 🎜 🎜Kenapa lambat🎜 🎜Jadi hasilnya adalah jelas:count
ialah fungsi, tetapikosong
ialahpembina bahasa
Memandangkan ia adalah
bahasa pembina
, kecekapan pelaksanaan pasti lebih tinggi daripada fungsi Sebagai contoh,echo
juga merupakanpembina bahasa
, 🎜. 🎜Sebagai contoh,echo 'str1','str2';
lebih cekap daripadaecho 'str1'.'str2';
, apatah lagiprint kod > 🎜 🎜🎜Tetapi🎜, selepas menggunakan OpCache atau JIT, tiada perbezaan antara keduanya (lihat di bawah), kerana kedua-duanya telah dioptimumkan. 🎜 🎜PHP asli🎜
🎜JIT (atau HipHop VM) terpakai🎜 rrreeePertama sekali, jika ia bukan tatasusunan bersekutu, isset lebih cekap dan kosong biasanya digunakan