[PHP-users 6714] Re: 英字を検索するさいのループ方法

SAWAI Syusuke php-users@php.gr.jp
Sat, 6 Apr 2002 10:46:31 +0900


さわいです。

文字列検索を case insensitiveに (大文字小文字を意識せずに)
おこなうときには 対象文字列を すべて どちらかに 変換して
から 検索することを お奨めします。

沼尻さんが 2つめの * に 書いてるところです. 

そうすれば 大文字と 小文字で 2回ループなんて 要りませんよね.

キーワードの abC を 検索するときに
つまり 検索対象が Abc という データもキーワードも
小文字の abc に 変換しておいて から 検索しましょうって 
ことね。そしたら ループは 1回だよね。

で、 複数キーワードが あるときは 長い文字列順に並べ替えて 
スタックに積んで 再帰で データを一つづつ取り出しながらチェック
するのが 常套手段だと 思います(早いかは 別 )

ループは 処理の基本ですが、、べき乗を 使った ループなんて
こんな処理では つかいませんよね。みなさん



> 宮崎です。
> 沼尻様 返信有難う御座います。
> 
> > * 検索キーワードのカラムとは別にもう一つカラムを用意する。
> > * 更新時に、トリガーで全て大文字(or小文字)にして、そのカラムに入れる。
> > * 該当の検索をするときは、もう一方のカラムを使う
> > というのは?
> 
> 質問が下手だった事を御詫び申し上げます。

そもそも プログラミング初心者? (理由は 以下に・・・)

> 上記の回答して頂いた事については既に出来ています。
> (私が勘違いしていなければ・・・)
> 問題は、べき乗で出た数だけループさせ、単語を大小字で
> かぶらずに並び替えをするという事です。
> 2(大小字)の2(キーワード数)乗は4回ループ
> 2の3乗は8回ループ
> 2の4乗は16回ループ
> というようにキーワードの数だけループするプログラムは下記にあります。
> 
> //べき乗式
>   $count = 1;
>   for ($i = 0; $i < sizeof($search_1); $i++)  {
>    $count *= 2;//大文字小文字あわせて2通り
> }

ちょっと いうと 2のべき乗 って 2進数の bit数が べき数に 相当するから

2^3 って 1<<3 って 書くぞ 普通・・・ 
ループなんて 使わなくてしかも1step だぞ、、、

だから 必要な式は
$count = 1<<sizeof($search_1);
かな?

> その後、連想配列の変数を2つ用意し一方には大文字もう一方には小文字を
> セットしました。
> ですがループするだけではなく、キーワードをループする数だけ、かぶらずに
> 並び替えしなければなりません。
> 
> 下記分かりにくくなっていた為再添付(下記は3つキーワードが有った場合)
> No.   1.   2.   3.   4.   5.   6.   7.   8.
>      A   a   A    a   A    a   A    a
>     and     and    and    and    and    and    and  and
>      B      b       B        b       b       B   b        B
>     and     and    and    and    and    and    and  and
>      C      c       c       C       c       c      C        C
> 

つーか この並ばせ方って うつくしくないよね。 2進数の世界に 生きるもの
としては
01234567回目
AAAAaaaa
BBbbBBbb
CcCcCcCc
って ならべないとね。 
こういうのが おもいついたら けっこう 簡単に
ループも書けると おもうんだけど、どうかな?

大文字を 0 小文字を 1 に みたてて Aa を 0bit目 Bbを 1bit目 Ccを 2bit目
に して Abc とかを 読むと 上の 数字になるのわかる?

きみは プログラミングの 基礎から やり直したほうが いいと 思うのは
私だけだろうか。