2011-03-24 18 views
12

(array)$someemptyvariablethatisnotarrayリターンarray([0] =>)代わりのarray()PHP - 空の配列

は、どのように私は)それは私が(私はforeachの内部でそれを使用していたときに反復されていない空の配列を取得することができますか?

+3

あなたは 'のvar_dump()'の代わりに 'ますprint_r()'、それはまた、配列の値の種類を紹介しますを使用する場合は! – powtac

答えて

18

使用している機能を試してみて、「casting」と呼ばれています。これは、変数が与えられた型になることを意味します。例では配列です。 PHPでvarがどのように変換されているかは、必ずしも明らかではありません!

あなたの例では、$ someemptyvariableは、NULL値を持つ1つのエントリを持つ配列になります。

PHP documentationは言う:

配列への自動変換 の動作は、現在未定義 です。

私はこのような何かをお勧めしますあなたのコードを解決するには:あなたは配列として非配列を唱えたとき

if (!is_array($someemptyvariablethatisnotarray) { 
    $someemptyvariablethatisnotarray = array(); 
} 
+1

http://www.php.net/manual/en/language.types.array.php#language.types.array.casting –

+2

配列としてNULLをキャストした場合は、空の配列になります。スカラー値(空の文字列であっても、NULLではないため)をキャストすると、NULL値ではなくその値を持つ配列になります。 –

24
$var = array(); 

は配列を空にします。これはあなたの後のことですか?

3
$somevar = empty($somevar) ? array() : (array)$somevar; 

多分ですか?私はキャストや目的を確信していませんが。ケアは、もう少し(あなたが達成しようとしているものの多分一例を?)ellaborateする

+0

私は 'foreach((array)$ something as $ k)... 'のように使っています。時々$ somethingは "偽"で配列ではないので、foreachに反復することは望ましくありません。 – Alex

+0

@Alexandra:私はPHPの柔軟性を知っていますが、あなたの変数があなたのデータ型を切り替えていることを知っていれば、他の誰かがそれをキャッチする(言い換えればキャストに頼らないでください)。私は銃を飛ばして、それがデータベース関連のものであると仮定し、要素を繰り返し反復することを妨げる可能性のある偽を返す行を取得します。 –

+0

yes :)私はすべての小さなものについて小切手を作るのが嫌いですが、私はここに選択肢がありませんと思います.. – Alex

3

unset($someemptyvariablethatisnotarray[0]) :)

4
if(!$variable){ 
     return array(); 
} 
2

は、それが唯一の値としてその変数を持つ配列を作成します。

空の配列が必要な場合は、array()を返す必要があります。

3

元気?

私は、これはあなたが後にしているものであると信じて:

$something = false; 
foreach((array)(empty($something) ? null : $something) as $k){ 
    echo 'never enters here'; 
} 

あなたは「(配列)偽」、を設定するとき、それはあなたが単一があるでしょう意味するのであなたは、空の配列を得ることはありません要素に割り当てられ、その要素には「FALSE」値が割り当てられます。同じ

は、空の文字列で起こる(NOT NULL 1!)空の文字列である単一の要素を、含む配列を返します(配列)$のemptystring!やっと同様に

array(''); 

はそれがお役に立てば幸いです。

乾杯!

0

ちょうど例えば、count()を使用します。​​