suin.io

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

suin2010年12月14日

マニュアルによると、戻り値は配列か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()にかけたほうがいいでしょう。

RELATED POSTS