今回はPHPのお話です。
PHPには「これでもか」と多くの配列関数があります。
その中でも大変遅い関数がありますので紹介しようと思います。
array_push()
コイツは遅い。ため息が出るほど遅いです。
そもそもarray_push()は、配列の最後に値を追加する関数です。
$hoge = array('ね', 'うし', 'とら');
array_push($hoge, 'う', 'たつ');
/*
[
"ね",
"うし",
"とら",
"う",
"たつ"
]
*/
でもこうするくらいだったら、
$hoge[] = 'う';
$hoge[] = 'たつ';
こうしたほうが早いです。ネット情報によると、10倍近く速度が違うらしいです。
ここまで差が出ると、中では一体何をしてるんだと疑いたくなります(^_^;;)。買い物を頼んだら1週間かかって帰ってくるようなものです。
array_push()は追加後の要素数を返しますが、それなら
count()を使って個別に調べたほうがいいと思います。
count()
count()は目立って遅い関数ではありません。しかし、使い方によっては速度面で損をしているかも。
count()は配列の要素数を返します。でも、場合によっては要素数を知らなくても済むことだってあるのです。
例えば、
//こうするくらいだったら、
if(count($hoge) === 0){
//こうしたほうが早い
if(isset($hoge[0])){
//また、こうするくらいだったら、
if(count($hoge) >= 6){
//この方が早い
if(isset($hoge[5]){
isset()は関数のような見た目をしていますが、実は違います。これ、
if()や
while()と同じ、
言語構造なのです。当然、呼び出しのオーバーヘッドがない分早いです。
ちなみに、
empty()も言語構造です。
まとめ
他にもネット上にはいろいろな情報が転がってます。array_search()は遅い、型が事前にわかってるなら==より===のが速い、intval()やstrval()よりキャストした方がいい、など。
ただ、時と場合によりけりです。具体的な配列の要素数を知りたいなら上で紹介した方法よりもcount()の方がましでしょう。確かにPHPには遅い関数や構文が多いですが(そもそも言語自体遅い)、場面に応じて使い分けられるようにしましょう。