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?


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

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.


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 :(

@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.


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.




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';

3

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


2

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

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

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.";
}

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)
    }
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.