web-dev-qa-db-fra.com

Comment vérifier si un tableau est vide en utilisant PHP?

players sera vide ou une liste séparée par des virgules (ou une valeur unique). 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 récupère le tableau $gameresult dans $gamerow? Dans ce cas, il serait probablement plus efficace de ne pas faire exploser le $playerlist s'il est vide, mais par souci d'argument, comment pourrais-je vérifier si un tableau est également vide?

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

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

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

Si vous devez nettoyer les valeurs vides avant de vérifier (généralement pour prévenir explodeing étranges chaînes):

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

Un tableau vide est falsey en PHP, vous n'avez donc 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

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

Dans la plupart des cas, vous voulez simplement vérifier !$emptyVar. Utilisez empty($emptyVar) si la variable n'a peut-être pas été définie ET si vous ne voulez pas déclencher un E_NOTICE; OMI c'est généralement une mauvaise idée.

144
Cobby

Quelques bonnes réponses, mais je pensais juste que je pourrais développer un peu pour expliquer plus clairement quand PHP détermine si un tableau est vide.


Notes principales:

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

Comme les valeurs d'un tableau ont besoin de clés, le fait d'avoir ou non des valeurs dans un tableau ne détermine pas s'il est vide, seulement s'il n'y a pas de clé (ET donc pas de valeur).

Donc, vérifier un tableau avec empty() ne vous indique pas simplement si vous avez des valeurs ou non, il vous indique si le tableau est vide et les clés font partie d'un tableau.


Réfléchissez donc à la manière dont vous produisez votre tableau avant de décider de la méthode de vérification à utiliser.
EG Un tableau aura a des clés lorsqu'un utilisateur soumet votre formulaire HTML lorsque chaque champ de formulaire a un nom de tableau (c'est-à-dire name="array[]").
Un non vide tableau sera produit pour chaque champ car il y aura des valeurs de clé incrémentées automatiquement pour chaque tableau de champ de formulaire.

Prenez 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 renvoyez en écho les clés et les valeurs des tableaux ci-dessus, vous obtenez les éléments suivants:

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

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

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

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

TABLEAU UN:
$ ArrayOne n'est pas vide

TABLEAU DEUX:
$ ArrayTwo n'est pas vide

TABLEAU TROIS:
$ ArrayThree n'est pas vide

Un tableau sera toujours vide lorsque vous affectez un tableau mais que vous ne l'utilisez pas par la suite, tel que:

$ArrayFour = array();

Ce sera vide, c'est-à-dire que PHP renverra TRUE lors de l'utilisation de si empty() ci-dessus.

Ainsi, si votre tableau a des clés - par exemple les noms d'entrée d'un formulaire ou si vous les attribuez manuellement (c.-à-d. Créez un tableau avec des noms de colonnes de base de données comme clés mais aucune valeur/donnée de la base de données), le tableau NE sera PAS empty().

Dans ce cas, vous pouvez boucler le tableau dans un foreach, en vérifiant si chaque clé a une valeur. C'est une bonne méthode si vous devez quand même parcourir le tableau, en vérifiant éventuellement les clés ou en nettoyant les données.

Cependant, ce n'est pas la meilleure méthode si vous devez simplement savoir "si des valeurs existent" renvoie TRUE ou FALSE. Il existe différentes méthodes pour déterminer si un tableau a des valeurs quand il sait qu'il aura 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 faites actuellement avec le tableau (le cas échéant).


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

Utilisation de array_filter():
Itère sur chaque valeur du tableau en les transmettant à la fonction de rappel. Si la fonction de rappel renvoie true, la valeur actuelle de array est renvoyée dans le tableau de résultat. Les clés de tableau sont préservé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 de array_filter() sur les trois exemples de tableaux (créés dans le premier bloc de code de cette réponse) a pour résultat:

TABLEAU UN:
$ arrayone n'est pas vide

TABLEAU DEUX:
$ arraytwo n'est pas vide

TABLEAU TROIS:
$ arraythree est vide

Ainsi, lorsqu'il n'y a pas de valeur, qu'il y ait ou non des clés, utilisez array_filter() pour créer un nouveau tableau, puis vérifiez si le nouveau tableau est vide et indique s'il y a des valeurs dans le tableau d'origine.
Ce n’est pas idéal et un peu brouillon, mais si vous avez un grand tableau et que vous n’avez pas besoin de le parcourir en boucle pour une autre raison, alors c’est le plus simple en termes de code nécessaire.


Je n'ai pas l'expérience de la vérification des frais généraux, mais il serait bon de connaître les différences entre l'utilisation de array_filter() et la fonction foreach si une valeur est trouvée.

Il est évident que le point de référence devrait être sur divers paramètres, sur des tableaux de taille petite et grande et lorsqu'il existe des valeurs et non, etc.

76
James
19

Si vous voulez savoir si la variable que vous testez est en fait explicitement un tableau vide, vous pouvez utiliser quelque chose comme ceci:

if ($variableToTest === array()) {
    echo 'this is explicitly an empty array!';
}
12
Tim Ogilvy

Pourquoi personne n'a dit cette réponse:

$array = [];

if($array == []) {
    // array is empty
}
8
Rob
is_array($detect) && empty($detect);

is_array

7
zloctb

Si vous souhaitez exclure les lignes fausses ou vides (telles que 0 => ''), où l'utilisation de empty() échouera, vous pouvez essayer:

if (array_filter($playerlist) == []) {
  // Array is empty!
}

array_filter() : Si aucun rappel n'est fourni, toutes les entrées de tableau égales à FALSE (voir la section conversion en booléen) seront supprimées.

Si vous souhaitez supprimer toutes les chaînes NULL, FALSE et vides (''), mais laissez les valeurs nulles (0), vous pouvez utiliser strlen comme rappel, par exemple:

$is_empty = array_filter($playerlist, 'strlen') == [];
6
kenorb

si vous voulez vérifier le contenu du tableau, vous pouvez utiliser:

$arr = array();

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

voir ici: http://codepad.org/EORE4k7v

4
nothingchen01

J'utilise ce code

$variable = array();

if( count( $variable ) == 0 )
{
    echo "Array is Empty";
}
else
{
    echo "Array is not Empty";
}

Mais notez que si le tableau a un grand nombre de clés, ce code passera beaucoup de temps à les compter, comparé aux autres réponses ici.

3
Joseph Asir Raja
 $gamerow = mysql_fetch_array($gameresult);

if (!empty(($gamerow['players'])) {
   $playerlist = explode(",", $gamerow['players']);
}else{

  // do stuf if array is empty
}
3
Anish Rai

Vous pouvez utiliser array_filter() qui fonctionne très bien dans toutes les situations:

$ray_state = array_filter($myarray);

if (empty($ray_state)) {
    echo 'array is empty';
} else {
    echo 'array is not empty';
}
3
user889030

A mon avis, le moyen le plus simple pour un tableau indexé serait simplement:

    if ($array) {
      //Array is not empty...  
    }

Une condition 'if' sur le tableau serait évaluée à true si le tableau n'est pas vide et false si le tableau est vide. Ceci est not applicable aux tableaux associatifs.

2
PJately

Je pense que la meilleure façon de déterminer si le tableau est vide ou non est d'utiliser count () comme ceci:

if(count($array)) {
    return 'anything true goes here';
}else {
    return 'anything false'; 
}
1
Anas Red
empty($gamerow['players'])
1
Dan McGrath

Cela semble fonctionner pour tous les cas

if(!empty(sizeof($array)))
0
Madhu Nair