Re: question regarding content search in array with PHP

ik <[email protected]> Wed, 19 Dec 2007 20:48:59 +0200
Newsgroups gmane.culture.hackers.israel
Message-ID <[email protected]>
First of all thank you for the answers.

I found a solution thanks to Oded Arbel, without using database, and
it is O(2*N) (if I remember the subject of complexity correctly).

It works as follows:

foreach ($names as $name_index => $name_value) {
   foreach ($namelist as $list_index => $list_value) {
      if (strncmp($list_value, $name_value, strlen($list_value)) == 0) {
         $name_found[] = $name_value;
      }
   }
}

Ido

On Dec 19, 2007 6:20 AM, Chen Shapira <[email protected]> wrote:
>
>
>
>
>
>
> If you don't need persistence for the array, don't use a DB such as
>  MySQL. DBs write everything to the disk. They are highly optimized to
>  never ever lose data, so they write to disk a lot. Then they read from
>  disk. IO operations are slow. So slow that you are probably better off
>  with the old algorithm.
>  If you want to go the DB way (and I certainly hope you'll find a
>  better way), try an in-memory database. As an Oracle DBA, I'll
>  recommend TimesTen - Oracle's in-memory database, but I'm sure you can
>  find an open-source solution as well.
>
>  Chen
>
>
>
>  On Dec 18, 2007 9:45 AM, Omer Zak <w1-W6cp89mEpD1mR6Xm/[email protected]> wrote:
>  >
>  >
>  >
>  >
>  >
>  >
>  > Since you want to use PHP, I assume that you want to do this when
>  > processing Web requests.
>  > Therefore, I would store the array as a DB (such as MySQL) table.
>  >
>  > The table will have two columns:
>  > - Word (indexed, non-unique key)
>  > - FullString
>  >
>  > For 'linux', you'll have
>  > 'linux','linux'
>  >
>  > For 'mac os', you'll have
>  > 'mac','mac os'
>  > 'os','mac os'
>  >
>  > Then, when you get the string from the user, split it into words and
>  > query for full strings corresponding to each word (using, for example:
>  > SELECT FullString FROM StringsTable WHERE Word='os';
>  > Of course, you should use the appropriate prepared queries to guard
>  > against SQL injection vulnerabilities).
>  >
>  > Now you'll have small number of full strings to be considered, and can
>  > apply your complicated and inefficient heuristic algorithm to determine
>  > which full string corresponds best to the user's string.
>  >
>  > --- Omer
>  >
>  >
>  > On Tue, 2007-12-18 at 19:06 +0200, ik wrote:
>  > > Hello list,
>  > >
>  > > I have an array that for the example will look as follows:
>  > >
>  > > linux, windows, mac os, beos, os/2, freebsd, netbsd, irix ....
>  > >
>  > > And a string:
>  > >
>  > > "linux kernel 2.6.24"
>  > >
>  > > Now I wish to find the closest value of the string in the array ->
>  > "linux".
>  > > But the problem as you can see, is that the string contain more
>  > > content then the array value.
>  > > I can think on many unefficient ways to find the part of string as an
>  > > array value, but I'm looking for an efficient way to do it. specially
>  > > if I need to serve a lot of strings on after the other...
>  > > The problem is, that I must use PHP (because I can think on an answer
>  > > using Perl, that I haven't tested).
>  > >
>  > > Any ideas how I can do it in an efficient way ?
>  >
>  > --
>  > MS-Windows is the Pal-Kal of the PC world.
>  > My own blog is at http://www.zak.co.il/tddpirate/
>  >
>  > My opinions, as expressed in this E-mail message, are mine alone.
>  > They do not represent the official policy of any organization with which
>  > I may be affiliated in any way.
>  > WARNING TO SPAMMERS: at http://www.zak.co.il/spamwarning.html
>  >
>  >
>  



-- 
http://ik.homelinux.org/