[PHP-users 19788]Re: 連想配列中の任意の位置に要素を挿入

Kentaro Ishitoya isitoya @ wakhok.ac.jp
2004年 1月 8日 (木) 22:54:52 JST


すみません、 先ほどのメールで下記関数の呼び出しが抜けておりました。
 array_insert($array, $data, $i);
テストのために抜いておいたのを忘れていました、申し訳ありません。

> function insert_after(&$array, $after, $data){
>     $i = 0;
>     foreach($array as $key => $node){
>         if($key === $after){
>             array_insert($array, $data, $i);
>             return;
>         }
>         $i++;
>     }
> }

これによって、処理にかかった時間も変化します。
最初に確保する配列の数->1000
insert_afterの第二引数 : かかった時間(sec)
10    : 0.0104509592056
100   : 0.0107599496841
999   : 0.0137809514999
最初に確保する配列の数->10000
10    : 0.170703053474
100   : 0.199388027191
1000  : 0.202067017555
9999  : 0.22752904892
最初に確保する配列の数->100000
10    : 1.70260500908
100   : 1.71887600422
1000  : 1.77352297306
10000 : 1.97188293934
99999 : 2.11603701115
array_insertを呼び出さない
10    : 0.000226020812988
100   : 0.000682950019836
1000  : 0.0045930147171
10000 : 0.0463879108429
99999 : 0.424569010735

Duron800Mhz、メモリ512MB、Apache 1.3.29 PHP 4.3.4でのベンチマーク結果です。
というわけで、もし定数時間で配列中の位置が取得できたとしてもarray_mergeの速
度が遅すぎて10万要素あると、ちょっと使いにくいですね。
ちなみに、最初に確保する配列の数->100000でinsert_afterの第二引数が99999の時
に、array_mergeとarray_spliceの時間を計測すると、
array_splice : 0.335507035255
array_merge  : 1.14207601547
という感じでした。

自己完結してしまいましたが、キーから配列中の位置を取得する方法がありましたら
ご教示ください。
申し訳ありませんでした。




PHP-users メーリングリストの案内