単一の文字列または文字列の配列のいずれかである変数$ vがあります
そして私はコードを持っています:
$a = array();
if (is_array($v)) {
$a = $v;
} else {
$a[] = $v;
}
よりエレガントな方法でそれをどのように行うことができますか? (つまり、変数を配列にキャストする方法)
以下を使用して、変数を配列にキャストできます。
$var = (array)$arr;
$a = (array) $v;
答えです。
私はあなたの可能性のあるスニペットをこのように書くでしょう(短く、あなたはそれを読んで、何が起こっているかを正確に知っています):
$a = is_array($v) ? $v : array($v);
または、 settype
を使用できます。
settype($a, "array");
変数の型を明示するため。これは、舞台裏でタイプキャストを使用した場合とまったく同じです。 (ループなどのグループごとの型キャストに便利です。)
オブジェクトをシングルカウント配列に変換する場合は、次のコードを使用できます。
$list = array([0] => $obj);
他の提供された回答は、オブジェクトを変換しようとすると機能しません。オブジェクトのフィールドを連想配列に変換するだけです(それがあなたがやろうとしていることでない限り)。
$var = (array)$arr;
他の人が言ったように、scalar値を配列にキャストすると、シングルトン配列(つまり、唯一の要素としてスカラーを持つ配列)が生成されます。ただし、他の人が指摘しているように、値がクラスインスタンスではなくスカラーになることがわかっている場合にのみ、これを行うように注意してください。
から PHP docs :
integer
、float
、string
、boolean
、およびresource
のいずれのタイプでも、値を配列に変換すると配列になりますインデックス0と変換されたスカラーの値を持つ単一の要素を持つ。つまり、_(array)$scalarValue
_はarray($scalarValue)
とまったく同じです。オブジェクトが配列に変換される場合、結果は要素がオブジェクトのプロパティである配列になります。キーはメンバー変数名ですが、いくつかの注目すべき例外があります。整数のプロパティにはアクセスできません。プライベート変数には、変数名の前にクラス名が追加されます。保護された変数には、変数名の前に「*」が付加されます。これらの先頭に付加された値には、両側にヌルバイトがあります。