web-dev-qa-db-fra.com

PHP - tableau vide

(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 ()?

12
Alex

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();
}
18
powtac
$var = array();

va vider un tableau. Est-ce ce que vous recherchez?

24
trickwallett
if(!$variable){
        return array();
}
4
sharpner

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é!

3
fsodano
$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?)

3
Brad Christie

Essayez unset($someemptyvariablethatisnotarray[0]) :)

3
beta0x64

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().

2
Rocket Hazmat

utilisez simplement count(), par exemple: if(count($array) == 0 ){ // empty array }

0
james