Yes, simply don't return 0 when the manufacturers are equal, but continue with other checks:

function cmp ($a, $b) {
    if ($a['cat'] == $b['cat']) {
        // return 0;  -- not anymore, but go on to compare manuf.
        if ($a['manufacturer'] == $b['manufacturer']) {
            if ($a['title'] == $b['title']) {
                // even title is the same, return 0
                return 0;
            }
            return ($a['title'] > $b['title']) ? -1 : 1;
        }
        return ($a['manufacturer'] > $b['manufacturer']) ? -1 : 1;
    }
    return ($a['cat'] > $b['cat']) ? -1 : 1;
}

Ashley M. Kirchner wrote:
Marek Kilimajer wrote:

Use usort. This function should do the work:


Hey thanks! That worked like a charm, once I figured out that making the comparison < instead of > I would get an ascending sort instead of the descending one. Now, can I do multiple sorts? Like, sort on "cat" first, "manufacturer" next, and "title last"? Here's the array structure again:

$i = 0;
$item[$i] = array( 'link'         => 'http://...',
                  'image'        => '/images/image.jpg',
                  'title'        => 'some title',
                  'price'        => '$14.00',
                  'cat'          => 'Frames',
                  'author'       => 'Pinochio',
                  'artist'       => '',
                  'asin'         => '010101',
                  'manufacturer' => 'Post'
                 ); $i++;
$item[$i] = array( 'link'         => 'http://...',
                  'image'        => '/images/something.jpg',
                  'title'        => 'this is fun',
                  'price'        => '$2.99',
                  'cat'          => 'Card',
                  'author'       => 'Mickey',
                  'artist'       => '',
                  'asin'         => '1116221',
                  'manufacturer' => 'Kraft'
                 ); $i++;
...etc., etc.



--
PHP General Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php



Reply via email to