1

I have a complex array that has been generated and I'm trying to sort it by ['file_date']. Descending. Here it is:

Array ( 
    ['images'] => Array ( 
        ['93-1138446.jpg'] => Array ( 
            ['file_title'] => '93-1138446', 
            ['file_path'] => 'gallery-images-1435/93-1138446.jpg', 
            ['thumb_path'] => 'resources/cache/275x275-75-d3cc92863d4f10bb6cf733159689a0e660fe5847df52beb531fa45b584876f0b.jpg', 
            ['file_date'] => '1497471649'
        ),
        ['93-8315415.jpg'] => Array ( 
            ['file_title'] => '93-8315415', 
            ['file_path'] => 'gallery-images-1435/93-8315415.jpg', 
            ['thumb_path'] => 'resources/cache/275x275-75-76a8495b1514b8385f090381edf21f64a6c71d2f15c14e0eadabbfce2824fe9a.jpg', 
            ['file_date'] => '1497471650'
        ),
        ['94-1234.jpg'] => Array ( 
            ['file_title'] => '94-1234', 
            ['file_path'] => 'gallery-images-1435/94-1234.jpg', 
            ['thumb_path'] => 'resources/cache/275x275-75-6e20bd7f6644db1c0fa36600d2aa298b6a5d11e578113f9015fd90dc6b7390e5.jpg', 
            ['file_date'] => '1497470721'
        )
    )
);

Thank you.

Poosh
  • 532
  • 2
  • 10
  • 25
  • dupe: https://stackoverflow.com/questions/17364127/how-can-i-sort-arrays-and-data-in-php or https://stackoverflow.com/questions/96759/how-do-i-sort-a-multidimensional-array-in-php or https://stackoverflow.com/questions/2699086/sort-multi-dimensional-array-by-value?rq=1 –  Jun 15 '17 at 02:27

2 Answers2

1

You can use usort(), live demo

usort($array['images'], function($a, $b){return $b['file_date'] - $a['file_date'];});
print_r($array);
Andreas
  • 1,691
  • 1
  • 15
  • 34
LF00
  • 27,015
  • 29
  • 156
  • 295
0

Try this function for three dimensional array only.

function array_sort($array, $on, $order=SORT_ASC){
    $new_array = array();
    $sortable_array = array();
    $flag=false;
    if (count($array) > 0) {
        foreach ($array as $k => $v) {
            if (is_array($v)) {
                foreach ($v as $k2 => $v2) {
                    if (is_array($v2)) {
                        foreach ($v2 as $k3 => $v3) {
                            if ($k3 == $on) {
                                $flag=true;
                                $sortable_array[$k][$k2] = $v2;
                            }
                        }
                    }
                }
            } else {
                $sortable_array[$k] = $v;
            }

            switch ($order) {
                case SORT_ASC:
                    isset($sortable_array[$k])?asort($sortable_array[$k]):'';
                    break;
                case SORT_DESC:
                    isset($sortable_array[$k])?arsort($sortable_array[$k]):'';
                    break;
            }
        }
    }
    return $flag===false?$array:$sortable_array;
}

Usage Example,

$array = array();
$array['images']['93-8315415.jpg']['file_title']='93-8315415';
$array['images']['93-8315415.jpg']['file_date']='2';
$array['images']['94-1234.jpg']['file_title']='94-1234';
$array['images']['94-1234.jpg']['file_date']='3';
$array['images']['93-1138446.jpg']['file_title']='93-1138446';
$array['images']['93-1138446.jpg']['file_date']='1';
$array['images']['94-12345.jpg']['file_title']='94-12345';
$array['images']['94-12345.jpg']['file_date']='4';

// Ascending sort.
echo "<pre>";
print_r(array_sort($array,'file_date'));
// Descending sort.
echo "<pre>";
print_r(array_sort($array,'file_date',SORT_DESC));
Jaydeep Mor
  • 1,690
  • 3
  • 21
  • 39