web-dev-qa-db-ja.com

変数を配列にキャストする方法

単一の文字列または文字列の配列のいずれかである変数$ vがあります
そして私はコードを持っています:

$a = array();
if (is_array($v)) {
    $a = $v;
} else {
    $a[] = $v;
}

よりエレガントな方法でそれをどのように行うことができますか? (つまり、変数を配列にキャストする方法)

31
tsds

以下を使用して、変数を配列にキャストできます。

    $var = (array)$arr;
62
cbroughton
$a = (array) $v;

答えです。

17
Kelly

私はあなたの可能性のあるスニペットをこのように書くでしょう(短く、あなたはそれを読んで、何が起こっているかを正確に知っています):

$a = is_array($v) ? $v : array($v);
8
kapa

または、 settype を使用できます。

settype($a, "array");

変数の型を明示するため。これは、舞台裏でタイプキャストを使用した場合とまったく同じです。 (ループなどのグループごとの型キャストに便利です。)

3
mario

オブジェクトをシングルカウント配列に変換する場合は、次のコードを使用できます。

$list = array([0] => $obj);

他の提供された回答は、オブジェクトを変換しようとすると機能しません。オブジェクトのフィールドを連想配列に変換するだけです(それがあなたがやろうとしていることでない限り)。

$var = (array)$arr;
1
TroySteven

他の人が言ったように、scalar値を配列にキャストすると、シングルトン配列(つまり、唯一の要素としてスカラーを持つ配列)が生成されます。ただし、他の人が指摘しているように、値がクラスインスタンスではなくスカラーになることがわかっている場合にのみ、これを行うように注意してください。

から PHP docs

integerfloatstringboolean、およびresourceのいずれのタイプでも、値を配列に変換すると配列になりますインデックス0と変換されたスカラーの値を持つ単一の要素を持つ。つまり、_(array)$scalarValue_はarray($scalarValue)とまったく同じです。

オブジェクトが配列に変換される場合、結果は要素がオブジェクトのプロパティである配列になります。キーはメンバー変数名ですが、いくつかの注目すべき例外があります。整数のプロパティにはアクセスできません。プライベート変数には、変数名の前にクラス名が追加されます。保護された変数には、変数名の前に「*」が付加されます。これらの先頭に付加された値には、両側にヌルバイトがあります。

0
GuyPaddock