Yang merupakan cara yang lebih baik untuk memeriksa apakah array memiliki lebih dari satu elemen?

177

Saya hanya perlu memeriksa apakah array memiliki lebih dari satu elemen. Saya mencoba melakukannya dengan cara ini:

if (isset($arr['1']))

cara tradisional lainnya adalah

if (sizeof($arr)>1)

Manakah dari keduanya yang lebih baik? Dalam situasi seperti itu, bagaimana saya harus menilai antara dua metode alternatif? Apakah ada pengukur kinerja yang tersedia untuk mengukur mana yang lebih baik?

tuxnani
sumber
Asumsi di sini adalah $ arr sudah divalidasi untuk array! Itu berarti, sebelum datang ke ini jika memeriksa kondisi, itu sudah memeriksa apakah ini sebuah array.
tuxnani
phparraylength.com
Camilo Martin

Jawaban:

342

Gunakan ini

if (sizeof($arr) > 1) {
     ....
}

Atau

if (count($arr) > 1) {
     ....
}

sizeof()adalah alias untuk count(), mereka bekerja sama.

Sunting: Menjawab bagian kedua dari pertanyaan: Dua baris kode dalam pertanyaan bukanlah metode alternatif, mereka melakukan fungsi yang berbeda. Yang pertama memeriksa apakah nilai at $arr['1']diatur, sedangkan yang kedua mengembalikan jumlah elemen dalam array.

Chibuzo
sumber
8
@ NB: Pertanyaannya telah diedit, kode awal adalah if (sizeof($arr)), yang diterjemahkan ke if (sizeof($arr) == 1)- jelas tidak memeriksa apakah array memiliki lebih dari satu elemen. Jawaban ini benar, dan saya tidak melihat alasan untuk memilih, maka saya merasa senang.
Alix Axel
2
Saya akui bahwa saya tidak melihat versi asli dari pertanyaan itu, yang dijawab oleh jawaban ini. Konteksnya berbeda, dan saya minta maaf karena memberi label jawaban sebagai salah. Tidak salah, jika Anda melihat pertanyaan aslinya. Buruk untuk pertanyaan yang diedit.
NB
Cuplikan kode kedua dalam pertanyaan akan memeriksa apakah nilai pada $ arr ['1'] disetel atau tidak, tidak peduli dengan penghitungan. Ini tidak dibahas dalam jawabannya, hanya berpikir saya akan menyebutkan ini dan berharap penulis jawabannya akan memperbarui jawabannya :).
Anders M.
@AndersM. terima kasih telah menunjukkan itu. Saya telah tercermin dalam jawabannya.
Chibuzo
Saya tidak menggunakan sesuatu seperti: <pre> <code> untuk indeks pada 0 .. <3 {guard let testTop: Prediciton = topPredictions [index] else {// objek default Anda} predictionResult.append (testTop)} </code> < / pre> dalam cepat 4
Alex22
44

if(is_array($arr) && count($arr) > 1)

Hanya untuk memastikan bahwa $ arr memang sebuah array.

sizeofadalah alias dari count, saya lebih suka menggunakan hitungan karena:

  1. 1 lebih sedikit karakter untuk diketik
  2. sizeof sekilas mungkin berarti ukuran array dalam hal memori, terlalu teknis :(
Andreas Wong
sumber
@AlixAxel hmm, tetapi jika $ arr adalah sebuah string, count ($ arr) akan mengembalikan jumlah karakter dari string itu jadi ya
Andreas Wong
Tidak, jika $arrsebuah string, itu akan kembali 1.
Alix Axel
12
Dari manual: Mengembalikan jumlah elemen dalam var. Jika var bukan array atau objek dengan antarmuka yang dapat diimplementasikan, 1 akan dikembalikan. Ada satu pengecualian, jika var adalah NULL, 0 akan dikembalikan .
Alix Axel
@AlixAxel oh ok ... wow terima kasih, tidak tahu bahwa: o ... Bagaimanapun saya hanya akan meninggalkannya di sana jika OP ingin membedakan antara String dan Array (terlepas dari ukuran) Terima kasih telah menunjuk itu :)
Andreas Wong
6
if (count($arr) >= 2)
{
  // array has at least 2 elements
}

sizeof()adalah alias untuk count(). Keduanya bekerja dengan non-array juga, tetapi mereka hanya akan mengembalikan nilai lebih dari 1 jika argumennya adalah array atau Countableobjek , jadi Anda cukup aman dengan ini.

Alix Axel
sumber
6

Jelas menggunakan count($arr) > 1( sizeofhanya alias untuk count) adalah solusi terbaik. Bergantung pada struktur array Anda, mungkin ada banyak elemen tetapi tidak ada $array['1']elemen.

Pencuri
sumber
6

Saya lebih suka count()fungsi bukan sizeOf()sebagai sizeOf()hanya sebuah alias count()dan tidak berarti sama dalam banyak bahasa lainnya. Banyak programmer berharap sizeof()untuk mengembalikan jumlah memori yang dialokasikan.

Mithun Debnath
sumber
1
Juga dijelaskan di sini. stackoverflow.com/questions/3974385/php-array-count-or-sizeof ini berharga karena pertanyaan ini sekarang menjadi top Google hit untuk sizeofvscount
Tim Ogilvy
4

Untuk memeriksa array kosong () lebih baik daripada sizeof ().

Jika array berisi sejumlah besar data. Ini akan memakan waktu lebih banyak untuk menghitung ukuran array. Tetapi memeriksa kosong selalu mudah.

//for empty
  if(!empty($array))
     echo 'Data exist';
  else 
     echo 'No data';


 //for sizeof
 if(sizeof($array)>1)
      echo 'Data exist';
 else 
    echo 'No data';
Kabir Hossain
sumber
3

isset () hanya memeriksa apakah suatu variabel disetel. Tidak ada hubungannya dengan ukuran atau isi array

Bono
sumber
2

Saya berasumsi $ arr adalah array maka ini adalah apa yang Anda cari

if ( sizeof($arr) > 1) ...
Thariama
sumber
1

Metode pertama if (isset($arr['1'])) tidak akan bekerja pada array asosiatif.

Misalnya, kode berikut menampilkan "Tidak, tidak lebih dari satu."

$arr = array(
    'a' => 'apple',
    'b' => 'banana',
);

if (isset($arr['1'])) {
    echo "Yup, more than one.";
} else {
    echo "Nope, not more than one.";
}
Dan Cron
sumber
0

Saya melakukan pengulangan array dan mendapatkan default yang sesuai di Swift 4/5

   for index in 0..<3
    {
        let isIndexValid = allObjects.indices.contains(index)
        var yourObject:Class = Class()
        if isIndexValid { yourObject = allObjects[index]}
        resultArray.append(yourObject)
    }
Alex22
sumber