(array)$someemptyvariablethatisnotarray
renvoie array([0] =>)
au lieu de array()
Comment puis-je le faire afin d'obtenir un tableau vide qui n'est pas itéré lorsque je l'utilise à l'intérieur de foreach ()?
La fonctionnalité que vous utilisez s'appelle " casting ". Cela signifie qu'une variable est forcée de devenir un type donné, dans votre exemple un tableau. Comment la var est convertie n'est pas toujours évident en PHP!
Dans votre exemple, $ someemptyvariablethatisnotarray ne devient pas un tableau avec une entrée avec une valeur NULL.
La documentation PHP dit:
Le comportement d'une conversion automatique en tableau est actuellement indéfini.
Pour résoudre votre code, je recommanderais quelque chose comme ceci:
if (!is_array($someemptyvariablethatisnotarray) {
$someemptyvariablethatisnotarray = array();
}
$var = array();
va vider un tableau. Est-ce ce que vous recherchez?
if(!$variable){
return array();
}
comment vas-tu?
Je crois que c'est ce que vous recherchez:
$something = false;
foreach((array)(empty($something) ? null : $something) as $k){
echo 'never enters here';
}
Vous n'obtenez pas un tableau vide, car lorsque vous définissez "(array) false", cela signifie que vous aurez un seul élément et que la valeur "FALSE" lui sera affectée.
Il en va de même avec une chaîne vide (pas une chaîne nulle!) (tableau) $ emptystring renverra un tableau contenant un seul élément, qui est une chaîne vide!
Similaire à faire:
array('');
J'espère que ça aide.
À votre santé!
$somevar = empty($somevar) ? array() : (array)$somevar;
Peut être? Bien que je ne sois pas sûr d’avoir le casting, ni le but. Prenez soin de travailler un peu plus (peut-être un exemple de ce que vous essayez d'accomplir?)
Essayez unset($someemptyvariablethatisnotarray[0])
:)
Lorsque vous transformez un non-tableau en tableau, il crée un tableau avec cette variable comme seule valeur.
Si vous voulez un tableau vide, vous devez renvoyer array()
.
utilisez simplement count()
, par exemple: if(count($array) == 0 ){ // empty array }