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.