Array PHP: jumlah atau ukuran?


216

Untuk menemukan jumlah elemen dalam PHP $array, mana yang lebih cepat / lebih baik / lebih kuat?

count($array)atau sizeof($array)?

Edit

Terima kasih kepada Andy Lester, saya telah mempersempit pertanyaan saya dari sudut pandang multibahasa. Komentator manual mengatakan

"[sizeof] tidak berarti sama dalam banyak bahasa lain berdasarkan pada C"

Apakah ini benar?


72
Referensi Daft Punk ... :)
Ben

2
Pertanyaan yang sangat bagus Tapi di sini ada situs benchmark yang bagus, yang mengatakan sizeof hanya 21 μs lebih cepat
sinaneker

Jawaban:


191

Saya akan menggunakan count()jika mereka sama, seperti dalam pengalaman saya itu lebih umum, dan karena itu akan menyebabkan lebih sedikit pengembang membaca kode Anda untuk mengatakan " sizeof(), apa itu?" dan harus berkonsultasi dengan dokumentasi.

Saya pikir itu berarti sizeof()tidak berfungsi seperti halnya di C (menghitung ukuran datatype). Ini mungkin membuat menyebutkan ini secara eksplisit karena PHP ditulis dalam C, dan menyediakan banyak identik bernama pembungkus untuk fungsi C ( strlen(), printf(), dll)


92

Menurut phpbench :

Apakah sepadan dengan upaya untuk menghitung panjang loop di muka?

//pre-calculate the size of array
$size = count($x); //or $size = sizeOf($x);

for ($i=0; $i<$size; $i++) {
    //...
}

//don't pre-calculate
for ($i=0; $i<count($x); $i++) { //or $i<sizeOf($x);
    //...
}

Sebuah loop dengan 1000 kunci dengan nilai 1 byte diberikan.

                  +---------+----------+
                  | count() | sizeof() |
+-----------------+---------+----------+
| With precalc    |     152 |      212 |
| Without precalc |   70401 |    50644 |
+-----------------+---------+----------+  (time in µs)

Jadi saya pribadi lebih suka menggunakan count () daripada sizeof () dengan pra kalk .


3
Tolong beritahu hanya yang membutuhkan waktu lebih sedikit. Kalau tidak, jawabannya cukup rumit dan membingungkan! Terima kasih
Pratik

6
versi php apa yang Anda uji? Versi yang lebih baru memiliki banyak optimisasi yang dapat membuat hasil ini sangat berbeda
John Hunt

4
mengapa sizeof lebih cepat tanpa menyimpan hasil itu menjadi variabel tetapi sebaliknya itu sebaliknya? Apakah ini beberapa pilihan desain yang buruk di interpreter php yang menyebabkan semacam overhead selektif? Saya ingin tahu bagaimana Anda melakukan benchmark ini, pengukuran microsecond membuat saya khawatir. mungkin mencoba menjalankan ini sejumlah besar kali di luar untuk loop?
FluorescentGreen5

1
apa maksudmu dengan "pre calc"?
rubo77

1
@ rubo77 Lihat kode di atas; "pre-calc" menentukan ukuran array sekali, sebelum for-loop. Tanpa "pre-calc" menentukan ukuran array di dalam for-loop
RobIII

38

Mereka identik menurut sizeof()

Dengan tidak adanya alasan untuk khawatir tentang "lebih cepat", selalu optimalkan untuk manusia. Mana yang lebih masuk akal bagi pembaca manusia?


19

Menurut situs web, sizeof()adalah alias count(), jadi mereka harus menjalankan kode yang sama. Mungkin sizeof()ada sedikit overhead karena perlu menyelesaikannya count()? Itu harus sangat minim.


53
Yah, maaf sudah menebak? Saya hanya menyatakan bahwa mereka sebenarnya hal yang sama. Kemudian, saya membuat kesimpulan logis bahwa menggunakan alias untuk suatu fungsi alih-alih fungsi yang sebenarnya mungkin sangat lambat, tetapi saya akui bahwa saya benar-benar tidak tahu dengan membukanya dengan kata "mungkin." Maaf jika itu menyinggung Anda. Mungkin lain kali saya akan menggunakan kata "sangat kecil."
Andy Groff

8

Saya tahu ini sudah lama tetapi hanya ingin menyebutkan bahwa saya mencoba ini dengan PHP 7.2:

<?php
//Creating array with 1 000 000 elements
$a = array();
for ($i = 0; $i < 1000000; ++$i)
{
    $a[] = 100;
}

//Measure
$time = time();
for ($i = 0; $i < 1000000000; ++$i)
{
    $b = count($a);
}
print("1 000 000 000 iteration of count() took ".(time()-$time)." sec\n");

$time = time();
for ($i = 0; $i < 1000000000; ++$i)
{
    $b = sizeof($a);
}
print("1 000 000 000 iteration of sizeof() took ".(time()-$time)." sec\n");
?>

dan hasilnya adalah:

1 000 000 000 iteration of count() took 414 sec
1 000 000 000 iteration of sizeof() took 1369 sec

Jadi gunakan saja count().


Ini menarik. Versi PHP apa yang Anda gunakan?
waza

@waza Saya menggunakan PHP 7.2
Mehdi Bounya

1
Dengan PHP 7.3.3: 1 000 000 000 iteration of count() took 525 sec 1 000 000 000 iteration of sizeof() took 1361 sec
AnthonyB


-2

Silakan gunakan fungsi hitung, Ini adalah contoh cara menghitung array dalam suatu elemen

$cars = array("Volvo","BMW","Toyota");
echo count($cars);

The count()fungsi mengembalikan jumlah elemen dalam array.

The sizeof()fungsi mengembalikan jumlah elemen dalam array.

The sizeof()fungsi alias dari count()fungsi.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.