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.
Ne devriez-vous pas utiliser vide? count prendra plus de temps à effectuer pour les grandes baies. –
Terminé. Je l'ai également changé pour le fait que vous n'avez pas besoin d'utiliser isset et d'autres choses. –
Étant donné son exemple de code, la variable sera définie de sorte que vous n'avez pas besoin d'utiliser 'empty()'. – Cobby