[PHP-users 16829]Re: in_array()なぜだめ?
Yasuo Ohgaki
yohgaki @ ohgaki.net
2003年 7月 18日 (金) 23:04:06 JST
大垣です。
ISIGE, Akira wrote:
> Mon, 14 Jul 2003 19:23:51 +0900 の,
> MT <akc @ mutt.freemail.ne.jp> 様のメールより.
>
>
>>で、気をつける点として、「配列のハッシュ機能を利用する」例としin_array()
>>を使わない...とあるのですが、in_array()を使わず、配列のハッシュ機能を使
>>うということはどういうことでしょうか? 具体的にin_array()はどう効率が悪
>>く、どのように書けば効率が良いのかを教えていただきたいのですが。
>
>
> 例えば,
>
> -----
> $list = array('orange', 'lemon', 'apple');
>
> if (in_array('lemon', $list)) {
> echo 'lemon exists';
> }
> -----
>
> とするより,
>
> -----
> $list[ 'orange' ] = 1;
> $list[ 'lemon' ] = 1;
> $list[ 'apple' ] = 1;
>
> if ($list[ 'lemon' ] == 1) {
> echo 'lemon exists';
> }
> -----
>
> とせよ,ということではないかと思います.
>
> # 実際にどっちが早いのか,バージョンによって変わったりするのかは
> # 確認していませんが...
ISIGEさんが説明されている通りです。
追加で説明すると、in_array()を利用した場合 O(n)の実行時間が
必要になり、PHPの配列がハッシュである特徴を利用した場合、
O(1)の実行時間が必要になります。
小さいや単純なプログラム、同時ユーザ数の少ない忙しくない
Webサーバではこの違いは判りづらいかも知れませんが、条件に
よってはこの変更により数倍の性能が実現できる事もあります。
--
Yasuo Ohgaki
PHP-users メーリングリストの案内