J'ai une variable $ v qui peut être une chaîne unique ou un tableau de chaînes
et j'ai un code:
$a = array();
if (is_array($v)) {
$a = $v;
} else {
$a[] = $v;
}
Comment cela peut-il être fait de manière plus élégante? (en d'autres termes, comment convertir une variable en tableau)
Vous pouvez convertir une variable en tableau en utilisant:
$var = (array)$arr;
$a = (array) $v;
est la réponse.
Je voudrais écrire votre extrait de code comme ceci (bref et vous le lisez et savez exactement ce qui se passe):
$a = is_array($v) ? $v : array($v);
Sinon, vous pouvez utiliser settype
:
settype($a, "array");
Pour expliciter le type de variable. C'est exactement la même chose que ce qui se passe avec une conversion de type en coulisse. (Plus utile pour la conversion de groupe, par exemple dans les boucles.)
Si vous cherchez à convertir un objet en un seul tableau, vous pouvez utiliser le code suivant:
$list = array([0] => $obj);
Les autres réponses fournies ne fonctionneront pas lors de la tentative de conversion d'un objet, mais simplement en convertissant les champs de cet objet en un tableau associatif (à moins que ce ne soit ce que vous essayez de faire).
$var = (array)$arr;
Comme d’autres l’ont dit, attribuer une valeur scalar à un tableau produira un tableau singleton (c’est-à-dire un tableau avec scalar comme seul élément). Cependant, comme d'autres l'ont encore souligné, veillez à ne le faire que si vous savez que la valeur sera un scalaire et non une instance de class.
À partir de les docs PHP :
Pour tous les types
integer
,float
,string
,boolean
etresource
, convertir une valeur en un tableau donne un tableau avec un seul élément d'indice zéro et la valeur du scalaire qui était converti. En d'autres termes,(array)$scalarValue
est exactement le même quearray($scalarValue)
.Si un objet est converti en tableau, le résultat est un tableau dont les éléments sont les propriétés de l'objet. Les clés sont la variable membre noms, à quelques exceptions notables près: les propriétés des entiers sont inaccessible; Les variables privées ont le nom de la classe ajouté au début. Nom de variable; les variables protégées ont un '*' ajouté au début du.. Nom de variable. Ces valeurs ajoutées au début ont des octets nuls de chaque côté.