0

i have this array i tried usort and array_multisort but both didn't worked. I want to sort each inner array with the release_date. Thats the latest release_date should come first in testing array and similarlly in second inner array 'test again'

$new_array = array(
    'testing' => array(
        array(
            'id' => 405275016,
            'release_date' => '2010-12-02 00:00:00'
        ),
        array(
            'id' => 342809056,
            'release_date' => '2009-12-09 00:00:00'
        ),
        array(
            'id' => 292430272,
            'release_date' => '2008-10-19 00:00:00'
        )
    )
    'test again' => array(
        array(
            'id' => 405275016,
            'release_date' => '2010-12-02 00:00:00'
        )
        array(
            'id' => 292430272,
            'release_date' => '2008-10-19 00:00:00'
        )
    )
);

Any idea will be highly appreciated.

EDIT

i did

foreach($new_array as $vsort) {
    uasort($vsort, function (array $a, array $b) { 
        return $a["release_date"] - $b["release_date"]; 
    });
}

but nothing happend to my new_array

Yes Barry
  • 9,514
  • 5
  • 50
  • 69
Astha
  • 1,728
  • 5
  • 17
  • 36
  • see this link http://stackoverflow.com/questions/4508145/sort-php-multidimensional-array-by-sub-value – Harsh Dec 13 '11 at 05:33

2 Answers2

1

The answer to your question lies in uasort().

If you want to sort each array then do a foreach loop and run uasort() on each one.

function mySort($a, $b)
{
    if ($a['id'] == $b['id']) {
        return 0;
    }
    return ($a['id'] < $b['id']) ? -1 : 1;
}

foreach ($array as $index => $arr) {
    uasort($array[$index], 'mySort');
}

http://codepad.org/TbNUiwBR

It appears you're using PHP 5.3. In that case, it can be rewritten like so:

foreach ($array as $index => $arr) {
    uasort($array[$index], function($a, $b) {
        if ($a['id'] == $b['id']) {
            return 0;
        }
        return ($a['id'] < $b['id']) ? -1 : 1;
    });
}
Yes Barry
  • 9,514
  • 5
  • 50
  • 69
-1

use foreach($new_array as $key => $val) and pass $new_array[$key] instead of $vsort, $vsort is the copy of array item and not the item itself

haynar
  • 5,961
  • 7
  • 33
  • 53