Wie kann besser überprüft werden, ob ein Array mehr als ein Element enthält?

177

Ich muss nur überprüfen, ob ein Array mehr als ein Element hat. Ich versuche es so zu machen:

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

der andere traditionelle Weg ist

if (sizeof($arr)>1)

Welcher der beiden ist besser? Wie sollte ich in solchen Situationen zwischen zwei alternativen Methoden beurteilen? Gibt es ein Leistungsprüfgerät, mit dem gemessen werden kann, welches besser ist?

Tuxnani
quelle
Angenommen, hier ist $ arr bereits für ein Array validiert! Das heißt, bevor es zu dieser if-Bedingungsprüfung kommt, wird bereits geprüft, ob es sich um ein Array handelt.
Tuxnani
phparraylength.com
Camilo Martin

Antworten:

342

Benutze das

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

Oder

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

sizeof()ist ein Alias ​​für count(), sie funktionieren gleich.

Bearbeiten: Beantwortung des zweiten Teils der Frage: Die beiden Codezeilen in der Frage sind keine alternativen Methoden, sie führen unterschiedliche Funktionen aus. Der erste prüft, ob der Wert bei $arr['1']gesetzt ist, während der zweite die Anzahl der Elemente im Array zurückgibt.

Chibuzo
quelle
8
@NB: Die Frage wurde bearbeitet, der ursprüngliche Code war if (sizeof($arr)), der übersetzt wurde if (sizeof($arr) == 1)- klar, dass nicht überprüft wird, ob das Array mehr als ein Element enthält. Diese Antwort ist richtig, und ich sehe keinen Grund, abzustimmen, daher meine Gegenstimme.
Alix Axel
2
Ich gebe zu, dass ich mir die Originalversion der Frage nicht angesehen habe, auf die diese Antwort eine Antwort ist. Der Kontext ist anders und ich entschuldige mich dafür, dass ich die Antwort als falsch bezeichnet habe. Es ist nicht falsch, wenn Sie sich die ursprüngliche Frage ansehen. Es ist schlecht für die bearbeitete Frage.
NB
Das zweite Codefragment in der Frage prüft, ob der Wert bei $ arr ['1'] gesetzt ist oder nicht. Es ist nicht über die Anzahl besorgt. Dies wurde in der Antwort nicht angesprochen, dachte nur, ich würde dies erwähnen und hoffe, dass der Autor der Antwort die Antwort aktualisiert :).
Anders M.
@AndersM. Vielen Dank für den Hinweis. Ich habe es in der Antwort reflektiert.
Chibuzo
Ich trage so etwas wie: <pre> <code> für den Index in 0 .. <3 {guard let testTop: Prediciton = topPredictions [index] else {// Ihr Standardobjekt} VorhersageResult.append (testTop)} </ code> < / pre> in Swift 4
Alex22
44

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

Nur um sicherzugehen, dass $ arr tatsächlich ein Array ist.

sizeofist ein Alias ​​von count, ich bevorzuge die Verwendung von count, weil:

  1. 1 Zeichen weniger eingeben
  2. sizeof auf den ersten Blick kann eine zu technische Größe eines Arrays in Bezug auf den Speicher bedeuten :(
Andreas Wong
quelle
@AlixAxel hmm, aber wenn $ arr eine Zeichenfolge ist, würde count ($ arr) die Zeichenanzahl dieser Zeichenfolge zurückgeben, also ya
Andreas Wong
Nein, wenn $arres sich um eine Zeichenfolge handelt, wird sie zurückgegeben 1.
Alix Axel
12
Aus dem Handbuch: Gibt die Anzahl der Elemente in var zurück. Wenn var kein Array oder Objekt mit implementierter Countable-Schnittstelle ist, wird 1 zurückgegeben. Es gibt eine Ausnahme: Wenn var NULL ist, wird 0 zurückgegeben .
Alix Axel
@AlixAxel oh ok ... wow danke, wusste das nicht: o ... Auf jeden Fall werde ich es einfach dort lassen, falls OP zwischen einem String und einem Array unterscheiden möchte (unabhängig von der Größe). Danke fürs Zeigen das raus :)
Andreas Wong
6
if (count($arr) >= 2)
{
  // array has at least 2 elements
}

sizeof()ist ein Alias ​​für count(). Beide funktionieren auch mit Nicht-Arrays, geben jedoch nur Werte größer als 1 zurück, wenn das Argument entweder ein Array oder ein CountableObjekt ist. Sie sind also ziemlich sicher.

Alix Axel
quelle
6

Offensichtlich ist die Verwendung count($arr) > 1( sizeofnur ein Alias ​​für count) die beste Lösung. Abhängig von der Struktur Ihres Arrays gibt es möglicherweise Tonnen von Elementen, aber kein $array['1']Element.

DiebMaster
quelle
6

Ich ziehe die count()Funktion statt sizeOf()als sizeOf()nur ein Alias für count()und bedeutet nicht das gleiche in vielen anderen Sprachen. Viele Programmierer erwarten sizeof(), dass der zugewiesene Speicher zurückgegeben wird.

Mithun Debnath
quelle
1
Auch hier erklärt. stackoverflow.com/questions/3974385/php-array-count-or-sizeof Dies ist wertvoll, da diese Frage jetzt ein Top-Google-Hit für sizeofvscount
Tim Ogilvy
4

Zum Überprüfen eines Arrays ist empty () besser als sizeof ().

Wenn das Array eine große Datenmenge enthält. Das Zählen der Größe des Arrays dauert länger. Das Überprüfen von Leerzeichen ist jedoch immer einfach.

//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
quelle
3

isset () prüft nur, ob eine Variable gesetzt ist. Hat nichts mit der Größe oder dem Inhalt des Arrays zu tun

Bono
quelle
2

Ich nehme an, $ arr ist ein Array, dann ist es das, wonach Sie suchen

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

Die erste Methode if (isset($arr['1'])) funktioniert nicht mit einem assoziativen Array.

Der folgende Code zeigt beispielsweise "Nein, nicht mehr als eins" an.

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

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

Ich mache meine Array-Schleifen und fülle die Standardeinstellungen in Swift 4/5 entsprechend aus

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