2010-02-07 6 views
292

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 vais chercher le tableau $gameresult dans $gamerow? Dans ce cas, il serait probablement plus efficace d'ignorer l'éclatement du $playerlist s'il est vide, mais pour les besoins de l'argument, comment vérifier si un tableau est également vide?Comment vérifier si un tableau est vide en PHP?

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

Répondre

458

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 devez nettoyer les valeurs vides avant de vérifier (généralement fait pour éviter explode étranges chaînes):

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

Ne devriez-vous pas utiliser vide? count prendra plus de temps à effectuer pour les grandes baies. –

+0

Terminé. Je l'ai également changé pour le fait que vous n'avez pas besoin d'utiliser isset et d'autres choses. –

+4

Étant donné son exemple de code, la variable sera définie de sorte que vous n'avez pas besoin d'utiliser 'empty()'. – Cobby

3
empty($gamerow['players']) 
99

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

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

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

+0

J'espère que cela ne changera pas dans une certaine norme ... ce sera douloureux –

57

Quelques réponses décentes, mais juste pensé que je développez un peu pour expliquer plus clairement quand PHP détermine si un tableau est vide.


Notes principales:

Un tableau avec une clé (ou les touches) sera déterminé comme PAS JETER par PHP.

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

Donc, vérifier un tableau avec empty() ne vous dit pas simplement si vous avez des valeurs ou non, il vous indique si le tableau est vide et si les clés font partie d'un tableau. Donc, considérez comment vous produisez votre tableau avant de décider quelle méthode de vérification utiliser.
EG Un tableau aura des clés lorsqu'un utilisateur soumettra votre formulaire HTML lorsque chaque champ de formulaire a un nom de tableau (par exemple name="array[]").
Un champ non vide sera produit pour chaque champ car il y aura des valeurs de clé auto-incrémentées pour le tableau de chaque 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 écho les clés du tableau et des valeurs pour les tableaux ci-dessus, vous obtenez les éléments suivants:

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

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

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

et tester les tableaux ci-dessus avec empty() retourne les résultats suivants:

Array:
$ ArrayOne n'est pas vide

DEUX MATRICE:
$ ArrayTwo est pas vide

TROIS MATRICE:
$ ArrayThree est pas vide

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

$ArrayFour = array(); 

Ce sera vide, à savoir PHP retournera TRUE lors de l'utilisation si empty() au-dessus. Donc, si votre tableau a des clés - par exemple un nom de formulaire ou si vous les attribuez manuellement (créer un tableau avec des noms de colonne de base de données comme clés mais pas de valeurs/données de la base de données), le tableau NE PAS être empty().

Dans ce cas, vous pouvez faire une boucle dans la matrice dans un foreach, en vérifiant si chaque clé a une valeur. C'est une bonne méthode si vous avez besoin de parcourir le tableau de toute façon, peut-être en vérifiant les clés ou en désinfectant les données.

Cependant, il n'est pas la meilleure méthode si vous avez simplement besoin de savoir « si les valeurs existent » renvoie TRUE ou FAUX. Il existe plusieurs méthodes pour déterminer si un tableau a des valeurs lorsqu'il sait qu'il aura des clés. Une fonction ou une classe pourrait être la meilleure approche, mais comme toujours, cela dépend de votre environnement et de vos besoins exacts, ainsi que d'autres choses comme ce que vous faites actuellement avec le tableau (si quelque chose se passe).


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

En utilisant array_filter():
Répète chaque valeur dans le tableau de les transmettre à la fonction de rappel. Si la fonction de rappel renvoie la valeur true, la valeur actuelle de array est renvoyée dans le tableau de résultats. Les clés de tableau 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 
    } 

Exécution array_filter() sur les trois tableaux par exemple (créé dans le premier bloc de code dans cette réponse) les résultats dans les domaines suivants:

MATRICE UN:
arrayone $ n'est pas vide

ARRAY TWO:
$ arraytwo n'est pas vide

ARRAY THREE:
arraythree de $ est vide

Alors, quand il n'y a pas de valeurs, si des clés ou non, en utilisant array_filter() pour créer un nouveau tableau, puis vérifier si le nouveau tableau est montre vide s'il y avait des valeurs dans la tableau original.
Ce n'est pas idéal et un peu brouillon, mais si vous avez un grand réseau et n'avez pas besoin de le faire pour toute autre raison, alors c'est le plus simple en termes de code nécessaire.


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

De toute évidence référence aurait besoin d'être sur différents paramètres, sur les petits et les grands tableaux et quand il y a des valeurs et non etc.

+1

Merci beaucoup pour cela. Il était vraiment informatif et a été capable de résoudre mon problème en utilisant 'array_filter()' –

+0

empty (array()) sera toujours évalué à FALSE, donc en ajoutant count (array()) == 0 produira vrai – mboullouz

+1

@mboullouz 'count (array()) == 0' est faux quand il y a des clés et pas de valeurs, donc ça ne sert pas à vérifier les valeurs seulement. Votre instruction est correcte, mais vous forcez un test avec 'count (array())' car le tableau est bien sûr vide. Nous devons vérifier quand le tableau est revenu d'un formulaire ou d'un autre endroit pour savoir s'il est vide (clés/valeurs) ou s'il a simplement des valeurs – James

3

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, par rapport aux autres réponses ici.

-6

Les solutions ci-dessus n'ont pas fonctionné pour moi.Au contraire, j'utilisé plus fiable (il peut avoir les frais généraux de déplacement):

$countarr = count($newArr); // Count the elements in an array. 
$checkarr = "" ; //Initialize the value of variable to blank. 
for($x=0;$x<$countarr;$x++) 
{ 
    $checkarr = $newArr1[$x] ; 
    if($checkarr != "") 
    { 
     // do stuff if array is not empty. 
    } 
} 
+5

Je trouve insondable que * none * des réponses existantes fonctionne. Pour que cette réponse fonctionne, count ($ newArr) doit être supérieur à 0, ce que [une réponse] (http://stackoverflow.com/a/2216060/369450) a posté 5 ans auparavant. – cpburnz

7

Si vous voulez vérifier 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!'; 
} 
3
$gamerow = mysql_fetch_array($gameresult); 

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

    // do stuf if array is empty 
} 
2

vous pouvez utiliser array_filters qui fonctionne très bien pour toutes les situations

$ray_state = array_filter($myarray); 

if (empty($ray_state)) { 
echo 'array is empty'; 
}else{ 
echo 'array is not empty'; 
} 
-1

que diriez-vous:

 
DepartmentPerSchool = array(); 
(empty(is_array($DepartmentPerSchool))) ? $DepartmentPerSchool //or echo is not empty : array('not set'=>'Not set. Contact Admin'); //or echo is empty 
0

Pourquoi ne dit cette réponse:

$array = []; 

if($array == []) { 
    // array is empty 
} 
0

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

if(count($array)) { 
    return 'anything true goes here'; 
}else { 
    return 'anything false'; 
} 
Questions connexes