Re: SQL Distinct-like behaviour

From: Date: Sat, 25 Aug 2007 01:25:22 +0000
Subject: Re: SQL Distinct-like behaviour
References: 1 2  Groups: php.general 
Request: Send a blank email to php-general+get-261259@lists.php.net to get a copy of this message
I don't know what I was thinking when I wrote that actually, that is so blatantly obvious :) Thanks Brian. Hamza. "brian" <phplist@subtropolix.org> wrote in message news:46CE54A3.0@subtropolix.org... > Marcelo de Moraes Serpa wrote: >> How could I iterate over the files in a directory and build a list of >> unique >> filenames? Take the following filelist: >> >> file1_01.jpg >> file2_01.jpg >> file2_02.jpg >> file2_03.jpg >> file3_01.jpg >> file3_02.jpg >> file3_03.jpg >> file4_01.jpg >> file4_02.jpg >> file4_03.jpg >> >> I would like to build an array like this: $names = >> ("file1","file2","file3","file4") >> > > As mentioned, use array_unique(). But that'll only help once you've built > up an array of filenames (after trimming off the last bit). I think Jay & > Hamza missed the fact that the files are *already unique*. One would be > hard-pressed to store multiple files with the same name in a directory. > > So, i'm assuming your filenames wil be more like: > > foo_01.jpg > foo_02.jpg > bar_01.jpg > > etc. IOW, you want to perform a regexp such that you isolate the last part > to remove it before shuffling out the dupes. So: > > $filenames = Array('foo_01.jpg', 'foo_02.jpg', 'bar_01.jpg', > 'baz_01.jpg', > 'bar_02.jpg'); > > $out = array_unique(preg_replace('/^([a-z]+)_[0-9]+\.jpg$/', '$1', > $filenames)); > > var_dump($out); > > --snip-- > array(3) { > [0]=> string(3) "foo" > [2]=> string(3) "bar" > [3]=> string(3) "baz" > } > --snip-- > > Note that if you might have uppercase letters, dashes, underscores, etc. > in the filename you'll need to modify that a bit. Something like: > > '/^([a-zA-Z-_]+)_[0-9]+\.jpg$/' > > If you'll have more than one file extension, replace 'jpg' with > '[a-z]+' > > However, the array_unique call will cause, eg. both 'bar_01.jpg' and > 'bar_01.png' to output 'bar' only once, which may not be what you want. > > HTH, > brian

« previous php.general (#261259) next »