Home > Archive > PHP Programming > March 2007 > array_multisort()
You are viewing an archived Text-only version of the thread.
To view this thread in it's original format and/or if you want to reply to
this thread please [click here]
|
|
| Schraalhans Keukenmeester 2007-03-27, 7:00 pm |
| I'm having a hard time getting to grips with this function.
I have an array shaped like this:
$dircontents[0]['filename'] ='index.html'
$dircontents[0]['owner'] = 'www'
$dircontents[0]['group'] = 'www'
$dircontents[0]['type'] = 'file'
$dircontents[1]['filename'] ='images'
$dircontents[1]['owner'] = 'www'
$dircontents[1]['group'] = 'www'
$dircontents[1]['type'] = 'dir'
etc.
'type' can be any of {dir,file,link}
How do I get the array sorted, alphabetically, first by type, then filename?
My attempts sofar have lead to a seemingly unsorted array, not even
close to anything recognizable. Is array_multisort() even what I should
be looking for?
Help appreciated!
Sh.
| |
| ZeldorBlat 2007-03-27, 10:02 pm |
| On Mar 27, 5:20 pm, Schraalhans Keukenmeester <bitbuc...@invalid.spam>
wrote:
> I'm having a hard time getting to grips with this function.
>
> I have an array shaped like this:
>
> $dircontents[0]['filename'] ='index.html'
> $dircontents[0]['owner'] = 'www'
> $dircontents[0]['group'] = 'www'
> $dircontents[0]['type'] = 'file'
>
> $dircontents[1]['filename'] ='images'
> $dircontents[1]['owner'] = 'www'
> $dircontents[1]['group'] = 'www'
> $dircontents[1]['type'] = 'dir'
>
> etc.
>
> 'type' can be any of {dir,file,link}
>
> How do I get the array sorted, alphabetically, first by type, then filename?
> My attempts sofar have lead to a seemingly unsorted array, not even
> close to anything recognizable. Is array_multisort() even what I should
> be looking for?
>
> Help appreciated!
> Sh.
Try usort() instead:
function cmp($a, $b) {
if($a['type'] < $b['type'])
return -1;
elseif($a['type'] > $b['type'])
return 1;
elseif($a['filename'] < $b['filename'])
return -1;
elseif($a['filename'] > $b['filename'])
return 1;
else
return 0;
}
usort($dircontents, 'cmp');
| |
| Schraalhans Keukenmeester 2007-03-28, 4:00 am |
| ZeldorBlat wrote:
> On Mar 27, 5:20 pm, Schraalhans Keukenmeester <bitbuc...@invalid.spam>
> wrote:
>
> Try usort() instead:
>
> function cmp($a, $b) {
> if($a['type'] < $b['type'])
> return -1;
> elseif($a['type'] > $b['type'])
> return 1;
> elseif($a['filename'] < $b['filename'])
> return -1;
> elseif($a['filename'] > $b['filename'])
> return 1;
> else
> return 0;
> }
>
> usort($dircontents, 'cmp');
>
Great! That's what I needed indeed. Somewhere in the back of my head...
Thanx Zeldor!
| |
| Schraalhans Keukenmeester 2007-03-28, 4:00 am |
| Schraalhans Keukenmeester wrote:
> ZeldorBlat wrote:
> Great! That's what I needed indeed. Somewhere in the back of my head...
> Thanx Zeldor!
Had to rewrite it a little since I usesd strings. Final version, in case
someone else likes to use it as well:
function cmp($a, $b) {
$retval = strcmp($a['type'],$b['type']);
if ($retval === 0)
$retval = strcmp($a['filename'],$b['filename']);
return $retval;
}
usort($this->dircontents, 'cmp');
Again, thanks for the pointer!
|
|
|
|
|