600 votes

Comment savoir si un tableau PHP est vide ?

players sera vide ou une liste séparée par des virgules (ou une seule valeur). Quel est le moyen le plus simple de vérifier s'il est vide? Je suppose que je peux le faire dès que je l'aille chercher $gameresult tableau en $gamerow ? Dans ce cas, il serait probablement plus efficace d'omettre d'exploser le $playerlist s'il est vide, mais pour les besoins de l'argument, comment vérifierais-je si un tableau est également vide?

 $gamerow = mysql_fetch_array($gameresult);
$playerlist = explode(",", $gamerow['players']);
 

Merci!

980voto

Tyler Carter Points 30030

Si vous avez juste besoin de vérifier s'il y a des éléments dans le tableau

 if( empty( $playerlist ) )
{
     // list is empty.
}
 

Si vous avez besoin de nettoyer les valeurs vides avant de vérifier (généralement fait pour éviter explode ing des chaînes étranges):

 foreach( $playerlist as $key => $value )
{
    if( empty( $value ) )
    {
       unset( $playerlist[$key] );
    }
}
if( empty( $playerlist ) )
{
   //empty array
}
 

201voto

Cobby Points 2396

Un tableau vide est falsey en PHP, vous n'avez même pas besoin d'utiliser empty() comme d'autres l'ont suggéré.

<?php

$playerList = array();
if (!$playerList) {
    echo "No players";
} else {
    echo "Explode stuff...";
}
// Output is No players

PHPs empty() détermine si une variable n'existe pas ou a un falsey valeur (comme array(), 0, null, false, etc).

Dans la plupart des cas, vous voulez juste pour vérifier !$emptyVar. Utiliser empty($emptyVar) si la variable n'aurait pas été réglé ET vous n'avez pas l'habitude de déclencher une E_NOTICE; IMO c'est généralement une mauvaise idée.

101voto

James Points 1325

Certains décent réponses, mais juste pensé que je voudrais développer un peu pour expliquer plus clairement lorsque PHP détermine si un tableau est vide.


Notes Principales:

Un tableau avec une clé (ou clés) sera déterminé comme NON vide par PHP.

Qu'un ensemble de valeurs clés d'exister, d'avoir des valeurs ou non dans un tableau n'est pas de déterminer si elle est vide, seulement si il y a pas de touches (ET donc pas de valeurs).

Donc la vérification d'un tableau avec empty() ne se contente pas de vous dire si vous avez des valeurs ou pas, il vous indique si le tableau est vide, et les touches sont une partie d'un tableau.


Ainsi, considérer la façon dont vous produisez votre tableau avant de décider quelle méthode de vérification à utiliser.
Par exemple Un tableau va avoir des touches lorsqu'un utilisateur soumet votre formulaire HTML lors de chaque champ de formulaire est un nom de tableau (ie name="array[]").
Un non vide de tableau, pour chaque champ, il sera automatiquement incrémenté clé de valeurs pour chaque champ de formulaire du tableau.

Prendre ces tableaux par exemple:

/* Assigning some arrays */

// Array with user defined key and value
$ArrayOne = array("UserKeyA" => "UserValueA", "UserKeyB" => "UserValueB");

// Array with auto increment key and user defined value
// as a form field would return with user input
$ArrayTwo[] = "UserValue01";
$ArrayTwo[] = "UserValue02";

// Array with auto incremented key and no value
// as a form field would return without user input
$ArrayThree[] = '';
$ArrayThree[] = '';

Si vous l'écho de sortir les clés du tableau et les valeurs des tableaux ci-dessus, vous obtenez le résultat suivant:

TABLEAU:
[UserKeyA] => [UserValueA]
[UserKeyB] => [UserValueB]

TABLEAU DEUX:
[0] => [UserValue01]
[1] => [UserValue02]

TABLEAU DE TROIS:
[0] => []
[1] => []

Et en testant les tableaux ci-dessus avec empty() renvoie les résultats suivants:

TABLEAU:
$ArrayOne n'est pas vide

TABLEAU DEUX:
$ArrayTwo n'est pas vide

TABLEAU DE TROIS:
$ArrayThree n'est pas vide

Un tableau sera vide lorsque vous affectez un tableau mais ne pas l'utiliser par la suite, tels que:

$ArrayFour = array();

Ce sera vide, c'est à dire PHP retournera TRUE lors de l'utilisation de si empty() sur le dessus de.

Donc, si votre matrice de touches, soit par exemple: un formulaire de saisie de noms ou si vous affectez manuellement (c'est à dire créer un tableau avec la base de données les noms de colonnes comme les clés, mais pas de valeurs de référence/données de la base de données), puis le tableau ne sera PAS empty().

Dans ce cas, vous pouvez faire une boucle de la matrice dans un foreach, les essais, si chaque touche a une valeur. C'est une bonne méthode si vous avez besoin de courir à travers la matrice de toute façon, la vérification de la remise des clés ou la désinfection des données.

Cependant, il n'est pas la meilleure méthode si vous avez simplement besoin de savoir "s'il existe des valeurs" renvoie VRAI ou FAUX. Il existe différentes méthodes pour déterminer si un tableau n'a aucune valeur quand on sais qu'il va avoir des clés. Une fonction ou une classe peut être la meilleure approche, mais comme toujours, cela dépend de votre environnement et de vos exigences exactes, ainsi que d'autres choses telles que ce que vous ne le font actuellement avec le tableau (si quoi que ce soit).


Voici une approche qui utilise très peu de code pour vérifier si un tableau a des valeurs:

À l'aide de array_filter():
Itère sur chaque valeur dans le tableau en les passant à la fonction de rappel. Si la fonction de rappel renvoie la valeur true, la valeur actuelle de la matrice est retourné dans le tableau résultat. Tableau de clés sont conservées.

$EmptyTestArray = array_filter($ArrayOne);

if (!empty($EmptyTestArray))
  {
    // do some tests on the values in $ArrayOne
  }
else
  {
    // Likely not to need an else, 
    // but could return message to user "you entered nothing" etc etc
  }

L'exécution array_filter() sur tous les trois tableaux (créé dans le premier bloc de code dans cette réponse) est la suivante:

TABLEAU:
$arrayone n'est pas vide

TABLEAU DEUX:
$arraytwo n'est pas vide

TABLEAU DE TROIS:
$arraythree est vide

Alors, quand il n'y a pas de valeurs, de savoir si il y a des clefs ou non, en utilisant array_filter() pour créer un nouveau tableau et de vérifier ensuite si le tableau est vide indique s'il y avait des valeurs dans le tableau d'origine.
Il n'est pas idéal et un peu brouillon, mais si vous avez un tableau énorme et n'avez pas besoin de faire une boucle par elle pour toute autre raison, alors c'est le plus simple en termes de code nécessaire.


Je suis pas d'expérience dans le contrôle des frais généraux, mais il serait bon de connaître la différence entre l'utilisation d' array_filter() et foreach vérifier si une valeur est trouvée.

Évidemment, les élèves pourraient avoir besoin d'être sur divers paramètres, sur de petits et de grands tableaux et quand il y a des valeurs et de ne pas etc.

24voto

7voto

user2709392 Points 21
if you are to check the array content you may use:

$arr = array();

if(!empty($arr)){
  echo "not empty";
}
else 
{
  echo "empty";
}

see here:
http://codepad.org/EORE4k7v

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X