Bir dizinin birden fazla öğesi olup olmadığını kontrol etmenin daha iyi bir yolu hangisidir?


177

Sadece bir dizi birden fazla öğe olup olmadığını kontrol etmek gerekir. Ben bu şekilde yapmaya çalışıyorum:

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

diğer geleneksel yol ise

if (sizeof($arr)>1)

İkisinden hangisi daha iyi? Bu durumlarda, iki alternatif yöntem arasında nasıl karar vermeliyim? Hangisinin daha iyi olduğunu ölçmek için herhangi bir performans kontrol ölçer var mı?


Varsayım burada bir dizi için zaten $ arr doğrulandı! Bu demektir ki, eğer durum kontrolüne gelmeden önce, zaten bir dizi olup olmadığını kontrol eder.
tuxnani

Yanıtlar:


342

Bunu kullan

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

Veya

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

sizeof()bir takma addır count(), aynı şekilde çalışırlar.

Düzenleme: Sorunun ikinci bölümünü yanıtlama: Sorudaki iki kod satırı alternatif yöntemler değildir, farklı işlevler yerine getirirler. Birincisi, değerinin $arr['1']ayarlanıp ayarlanmadığını denetler , ikincisi ise dizideki öğelerin sayısını döndürür.


8
@NB: Soru düzenlendi, ilk kod, if (sizeof($arr))çevrildi if (sizeof($arr) == 1)- dizinin birden fazla öğesi olup olmadığını açıkça kontrol etmedi . Bu cevap doğrudur ve aşağı oylama için hiçbir neden göremiyorum, dolayısıyla benim oyum.
Alix Axel

2
Bu cevabın bir cevap olduğu sorunun orijinal versiyonuna bakmadığımı itiraf edeceğim. Bağlam farklı ve cevabı yanlış olarak etiketlediğim için özür dilerim. Orijinal soruya bakarsanız yanlış değil. Düzenlenen soru için kötü.
NB

Sorudaki ikinci kod snippet'i $ arr ['1'] değerinin ayarlanıp ayarlanmadığını kontrol eder, sayımla ilgili değildir. Bu cevapta ele alınmadı, sadece bundan bahsettiğimi düşündüm ve cevabın yazarı cevabı güncelleyeceğini umuyoruz :).
Anders M.

@AndersM. işaret ettiğin için teşekkürler. Cevaba yansıttım.
Chibuzo

Gibi bir şey don: <pre> <code> 0 dizin için .. <3 {guard let testTop: Prediciton = topPredictions [index] else {// varsayılan nesneniz} predictionResult.append (testTop)} </code> < / pre> hızlı 4'te
Alex22

44

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

Sadece $ arr gerçekten bir dizi olduğundan emin olmak için.

sizeofbir takma ad count, ben sayısı kullanmayı tercih ediyorum çünkü:

  1. Yazmak için 1 daha az karakter
  2. Hızlı bir bakışta sizeof, bellek açısından bir dizinin boyutu anlamına gelebilir, çok teknik :(

@AlixAxel hmm, ancak $ arr bir dize ise, count ($ arr) bu dizenin karakter sayısını döndürür, bu yüzden ya
Andreas Wong

Hayır, eğer $arrbir dize ise, geri döner 1.
Alix Axel

12
Kılavuzdan: var. Var, bir Countable arabirimi uygulanmış bir dizi veya nesne değilse, 1 döndürülür. Bir istisna vardır, var NULL ise 0 döndürülür .
Alix Axel

@AlixAxel oh ok ... vay teşekkürler, bilmiyordum: o ... OP, bir String ve Array (boyut ne olursa olsun) arasında ayrım yapmak istemesi durumunda her durumda onu orada bırakacağım. İşaret ettiğiniz için teşekkürler dışarı :)
Andreas Wong

6
if (count($arr) >= 2)
{
  // array has at least 2 elements
}

sizeof()için bir takma addır count(). Her ikisi de dizilerle çalışmaz, ancak yalnızca argüman bir dizi veya Countablenesne ise 1'den büyük değerler döndürürler , bu nedenle bu konuda oldukça güvendesiniz.


6

Açıkçası kullanmak count($arr) > 1( sizeofsadece bir takma addır count) en iyi çözümdür. Dizinizin yapısına bağlı olarak, tonlarca öğe olabilir, ancak $array['1']öğe olmayabilir .




4

Bir diziyi kontrol etmek için empty (), sizeof () 'den daha iyidir.

Dizi büyük miktarda veri içeriyorsa. Dizinin boyutunu saymak daha fazla zaman alır. Ancak boş kontrol etmek her zaman kolaydır.

//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 () sadece bir değişkenin ayarlanıp ayarlanmadığını kontrol eder.


2

$ Arr bir dizi olduğunu varsayalım o zaman bu ne arıyorsun

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

1

İlk yöntem if (isset($arr['1'])) ilişkilendirilebilir bir dizide çalışmaz.

Örneğin, aşağıdaki kod "Hayır, birden fazla değil" görüntüler.

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

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

0

Benim dizi döngü ve Swift 4/5 buna göre doldurulmuş varsayılan alma

   for index in 0..<3
    {
        let isIndexValid = allObjects.indices.contains(index)
        var yourObject:Class = Class()
        if isIndexValid { yourObject = allObjects[index]}
        resultArray.append(yourObject)
    }
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.