配列か連想配列かを判別する
良い方法を見つけたのでメモ。
効率の良いプログラムを書くことを心がけたいね。
http://d.hatena.ne.jp/fbis/20091112/1258002754
array_keysやrangeを使って一時的な配列を確保しているのは無駄が多いのではないかと。
対象となる配列が大きければ大きいほどメモリ効率が悪くなりそうな気がします。
要件としては、対象の配列のキーが0からの連番になってるかどうかを調べたいだけなのでforeachでループしながら比較する方が効率良いのではないかと思い、実装してみました。
$i = 0;
foreach($array as $k => $dummy) {
if ( $k !== $i++ ) return true;
}
return false;
}
実は実際のところ、連想配列として利用する配列のキー名に0という数字は使わないという前提条件がある場合、その対象配列の最初のキーが0かどうかだけをチェックすればそれだけでOKだったりするんですよね。
reset($array);
list($k) = each($array);
return $k !== 0;
}