Quelques réponses décentes, mais je pensais juste 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é comme NON vide par PHP.
Comme les valeurs de tableau ont besoin de clés pour exister, avoir ou non des valeurs dans un tableau ne détermine pas s'il est vide, uniquement 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 dit si le tableau est vide et que les clés font partie d'un tableau.
Considérez donc 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 soumet votre formulaire HTML lorsque chaque champ de formulaire a un nom de tableau (c'est-à-dire name="array[]"
).
Un tableau non vide sera produit pour chaque champ car il y aura des valeurs de clé incrémentées automatiquement 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 faites écho aux clés et valeurs de tableau pour les tableaux ci-dessus, vous obtenez ce qui suit:
TABLEAU UN:
[UserKeyA] => [UserValueA]
[UserKeyB] => [UserValueB]
TABLEAU DEUX:
[0] => [UserValue01]
[1] => [UserValue02]
TABLEAU TROIS:
[0] => []
[1] => []
Et le test des tableaux ci-dessus avec empty()
renvoie les résultats suivants:
ARRAY ONE:
$ 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 ne l'utilisez pas par la suite, comme:
$ArrayFour = array();
Ce sera vide, c'est-à-dire que PHP retournera TRUE lors de l'utilisation de if empty()
sur ce qui précède.
Donc, si votre tableau a des clés - par exemple par les noms d'entrée d'un formulaire ou si vous les affectez manuellement (c.-à-d. Créez un tableau avec des noms de colonnes de base de données comme clés mais pas de valeurs / données de la base de données), alors le tableau ne le sera PAS empty()
.
Dans ce cas, vous pouvez boucler le tableau dans un foreach, tester si chaque clé a une valeur. C'est une bonne méthode si vous devez quand même parcourir le tableau, peut-être en vérifiant les clés ou en désinfectant les données.
Cependant, ce n'est pas la meilleure méthode si vous avez simplement besoin de savoir "si des valeurs existent" renvoie VRAI ou FAUX . Il existe différentes 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 peut être la meilleure approche, mais comme toujours, cela dépend de votre environnement et des 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 array_filter()
:
Itère sur chaque valeur du tableau en les passant à la fonction de rappel. Si la fonction de rappel renvoie true, la valeur actuelle du tableau est renvoyée dans le tableau résultat. 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
}
L'exécution array_filter()
sur les trois tableaux d'exemple (créés dans le premier bloc de code de cette réponse) entraîne les résultats suivants:
ARRAY ONE:
$ 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 valeurs, qu'il y ait des clés ou non, utiliser array_filter()
pour créer un nouveau tableau, puis vérifier si le nouveau tableau est vide montre s'il y avait des valeurs dans le tableau d'origine.
Ce n'est pas idéal et un peu désordonné, mais si vous avez un énorme tableau et n'avez pas besoin de le parcourir pour toute 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 array_filter()
et la foreach
vérification si une valeur est trouvée.
De toute évidence, le benchmark devrait être sur divers paramètres, sur de petits et grands tableaux et quand il y a des valeurs et non etc.