[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 メーリングリストの案内