Quelle est la meilleure façon de vérifier si un tableau contient plus d'un élément?

177

J'ai juste besoin de vérifier si un tableau a plus d'un élément. J'essaye de le faire de cette façon:

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

l'autre manière traditionnelle est

if (sizeof($arr)>1)

Lequel des deux est le meilleur? Dans de telles situations, comment juger entre deux méthodes alternatives? Existe-t-il un compteur de contrôle des performances disponible pour mesurer ce qui est le meilleur?

Tuxnani
la source
On suppose ici que $ arr est déjà validé pour un tableau! Cela signifie qu'avant d'en venir à ce test de condition if, il est déjà vérifié si c'est un tableau.
tuxnani
phparraylength.com
Camilo Martin

Réponses:

342

Utilisez ceci

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

Ou

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

sizeof()est un alias pour count(), ils fonctionnent de la même manière.

Edit: Répondre à la deuxième partie de la question: Les deux lignes de codes de la question ne sont pas des méthodes alternatives, elles remplissent des fonctions différentes. Le premier vérifie si la valeur à $arr['1']est définie, tandis que le second renvoie le nombre d'éléments dans le tableau.

Chibuzo
la source
8
@NB: La question a été modifiée, le code initial était if (sizeof($arr)), qui s'est traduit en if (sizeof($arr) == 1)- clairement cela ne vérifie pas si le tableau a plus d'un élément. Cette réponse est correcte et je ne vois aucune raison de voter contre, d’où mon vote favorable.
Alix Axel
2
J'avoue que je n'ai pas regardé la version originale de la question, à laquelle cette réponse est une réponse. Le contexte est différent et je m'excuse d'avoir qualifié la réponse de fausse. Ce n'est pas faux, si vous regardez la question initiale. C'est mauvais pour la question éditée.
NB
Le deuxième extrait de code de la question vérifiera si la valeur à $ arr ['1'] est définie ou non, il n'est pas concerné par le décompte. Cela n'a pas été abordé dans la réponse, j'ai juste pensé le mentionner et j'espère que l'auteur de la réponse mettra à jour la réponse :).
Anders M.
@AndersM. Merci d'avoir fait remarquer cela. Je l'ai reflété dans la réponse.
Chibuzo
Je mets quelque chose comme: <pre> <code> pour l'index en 0 .. <3 {guard let testTop: Prediciton = topPredictions [index] else {// votre objet par défaut} predictionResult.append (testTop)} </code> < / pré> dans swift 4
Alex22
44

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

Juste pour être sûr que $ arr est bien un tableau.

sizeofest un alias de count, je préfère utiliser count car:

  1. 1 caractère de moins à taper
  2. sizeof en un coup d'œil peut signifier une taille d'un tableau en termes de mémoire, trop technique :(
Andreas Wong
la source
@AlixAxel hmm, mais si $ arr est une chaîne, count ($ arr) renverrait le nombre de caractères de cette chaîne donc oui
Andreas Wong
Non, si $arrest une chaîne, elle retournera 1.
Alix Axel
12
À partir du manuel: renvoie le nombre d'éléments dans var. Si var n'est pas un tableau ou un objet avec une interface Countable implémentée, 1 sera renvoyé. Il y a une exception, si var est NULL, 0 sera retourné .
Alix Axel
@AlixAxel oh ok ... wow merci, je ne savais pas que: o ... En tout cas, je vais juste le laisser là au cas où OP voudrait faire la différence entre une chaîne et un tableau (quelle que soit la taille) Merci d'avoir pointé que dehors :)
Andreas Wong
6
if (count($arr) >= 2)
{
  // array has at least 2 elements
}

sizeof()est un alias pour count(). Les deux fonctionnent également avec des non-tableaux, mais ils ne renverront que des valeurs supérieures à 1 si l'argument est un tableau ou un Countableobjet , vous êtes donc assez en sécurité avec cela.

Alix Axel
la source
6

De toute évidence, l'utilisation de count($arr) > 1( sizeofn'est qu'un alias pour count) est la meilleure solution. Selon la structure de votre tableau, il peut y avoir des tonnes d'éléments mais pas d' $array['1']élément.

ThiefMaster
la source
6

Je préfère la count()fonction au lieu de sizeOf()comme sizeOf()étant seulement un alias de count()et ne signifie pas la même chose dans de nombreuses autres langues. De nombreux programmeurs s'attendent sizeof()à renvoyer la quantité de mémoire allouée.

Mithun Debnath
la source
1
Également expliqué ici. stackoverflow.com/questions/3974385/php-array-count-or-sizeof Ceci est précieux car cette question est maintenant l'un des meilleurs hits de Google pour sizeofvscount
Tim Ogilvy
4

Pour vérifier un tableau, vide () est meilleur que sizeof ().

Si le tableau contient une énorme quantité de données. Il faudra plus de temps pour compter la taille du tableau. Mais vérifier à vide est toujours facile.

//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
la source
3

isset () vérifie uniquement si une variable est définie .. N'a rien à voir avec la taille ou ce que le tableau contient

Bono
la source
2

Je suppose que $ arr est un tableau, alors c'est ce que vous recherchez

if ( sizeof($arr) > 1) ...
Thariama
la source
1

La première méthode if (isset($arr['1'])) ne fonctionnera pas sur un tableau associatif.

Par exemple, le code suivant affiche «Non, pas plus d'un».

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

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

Je fais mon tableau en boucle et je remplis les valeurs par défaut en conséquence dans 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
la source