Do you have a question? Post it now! No Registration Necessary.  Now with pictures!

Threaded View
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'


'type' can be any of

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!

Re: array_multisort()

Quoted text here. Click to load it

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;
        return 0;

usort($dircontents, 'cmp');

Re: array_multisort()

ZeldorBlat wrote:
Quoted text here. Click to load it
Great! That's what I needed indeed. Somewhere in the back of my head...
Thanx Zeldor!

Re: array_multisort()

Schraalhans Keukenmeester wrote:
Quoted text here. Click to load it

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!

Site Timeline