にゃあ

array_combine()の戻り値がNULLになることがある

マニュアルによると、戻り値は配列かFALSEになる

マニュアルによると「作成した配列を返します。 互いの配列の要素の数が合致しない場合や空の配列である場合に FALSE を返します。」とのことなので、 普通に考えてプログラムとしては、配列型か、BOOL型のFALSEが帰ってくることを想定して作り込むと思います。 ところが、調べてみるとNULLが帰ってくることもあるようです。 バグなのか仕様なのかは分かりません。

期待通りの動作

同じ要素数の配列同士を組み合わせる。

var_dump(array_combine(array(1), array(1)));
array(1) {
  [1]=>
  int(1)
}

空の配列同士を組み合わせる。んー、これはFALSEでいいのかな…。

var_dump(array_combine(array(), array()));
Warning: array_combine(): Both parameters should have at least 1 element in /Users/suin/test.php on line 5
bool(false)

要素数が異なる配列同士を組み合わせる。

var_dump(array_combine(array(1, 2), array(1)));
Warning: array_combine(): Both parameters should have an equal number of elements in /Users/suin/test.php on line 7
bool(false)

期待通りではない動作

NULLと配列を組み合わせる。

var_dump(array_combine(null, array(1)));
Warning: array_combine() expects parameter 1 to be array, null given in /Users/suin/test.php on line 9
NULL

文字列と配列を組み合わせる。

var_dump(array_combine('string', array(1)));
Warning: array_combine() expects parameter 1 to be array, string given in /Users/suin/test.php on line 11
NULL

オブジェクトと配列を組み合わせる。

var_dump(array_combine(new stdClass, array(1)));
Warning: array_combine() expects parameter 1 to be array, object given in /Users/suin/test.php on line 14
NULL

こんな実装はご用心

$newArray = array_combine($keys, $values);

if ( $newArray === false )
{
	// エラー処理
	// NULLはエラー処理の対象にならない。
}

array_combine()の引数が変数になっている場合、その変数が本当に配列型か確認してからarray_combine()にかけたほうがいいでしょう。


コメント&トラバ

トラックバックを送る

無関係なスパムのトラックバックを防止するため、リンク先で本サイト(suin.asia)への言及が確認されないトラックバックは破棄しています。

トラバURL : http://suin.asia/trackback/485

コメントを書く

お名前* URL
本文*
合い言葉* ←「speckoksou」と入力して下さい。
* この記事の話題と関係ないコメントはどんな内容でも削除します。(移動できないので)

トラックバック

トラックバックがないのはさみしいにゃん…。

コメント

dai(2010.12.31) #
今年も終わるけど来年も宜しくね。
yoshisだよん(2011.02.19) #
スゲーなsuinさん。関心しましたよ〜。さて私はだれでしょう。すぱむぢゃないよっw。ただ酔っぱらってるだけ。

Author

Submenu

Recent Entries

XOOPS Cube Dev Ring

氷川 XOOPS Module 開発室

Recent Comments

Recent Trackbacks