php - Sort Multidimensional array by a defined order -
this question has answer here:
- how can sort arrays , data in php? 7 answers
i have example array, , sort each first level item (66000
, 66001
, 66002
) in order: new store
first in list, store relocation
second in list, , didn't include underperforming stores
in example array, last. need sorted open
date how can sort them way?
i believe need use usort
accomplish this, don't understand usort
function, can this?
here function far...
usort($mainpgarr, function($a, $b){ });
example original array:
array( [66000] => array( [january] => array( [status] => new store [sales] => 100.00 [open] => 2013-05-01 ) [february] => array( [status] => new store [sales] => 200.00 [open] => 2013-05-01 ) [march] => array( [status] => new store [sales] => 140.00 [open] => 2013-05-01 ) ) [66001] => array( [january] => array( [status] => store relocation [sales] => 3400.00 [open] => 2013-07-01 ) [february] => array( [status] => store relocation [sales] => 1340.00 [open] => 2013-07-01 ) [march] => array( [status] => store relocation [sales] => 1550.00 [open] => 2013-07-01 ) ) [66002] => array( [january] => array( [status] => new store [sales] => 1050.00 [open] => 2013-01-01 ) [february] => array( [status] => new store [sales] => 1009.00 [open] => 2013-01-01 ) [march] => array( [status] => new store [sales] => 1020.00 [open] => 2013-01-01 ) ) )
example final array
array( [66002] => array( [january] => array( [status] => new store [sales] => 1050.00 [open] => 2013-01-01 ) [february] => array( [status] => new store [sales] => 1009.00 [open] => 2013-01-01 ) [march] => array( [status] => new store [sales] => 1020.00 [open] => 2013-01-01 ) ) [66000] => array( [january] => array( [status] => new store [sales] => 100.00 [open] => 2013-05-01 ) [february] => array( [status] => new store [sales] => 200.00 [open] => 2013-05-01 ) [march] => array( [status] => new store [sales] => 140.00 [open] => 2013-05-01 ) ) [66001] => array( [january] => array( [status] => store relocation [sales] => 3400.00 [open] => 2013-07-01 ) [february] => array( [status] => store relocation [sales] => 1340.00 [open] => 2013-07-01 ) [march] => array( [status] => store relocation [sales] => 1550.00 [open] => 2013-07-01 ) ) )
all need in usort define how 2 given items should ordered.
in case easier if array data tidied bit, taking status out of month data. is, we'll have assume same months.
with assumption made use first months' status our comparison.
usort($mainpgarr, function($a, $b){ if ($a[0]['status'] == $b[0]['status']) { // status equal sort open date if ($a[0]['open'] == $b[0]['open']) { return 0; } else { return ($a[0]['open'] > $b[0]['open']) ? 1 : -1; } } else { // sorting status // can use simple comparison operation desired order happens alphabetical return ($a[0]['status'] > $b[0]['status']) ? 1 : -1; } });
if keys important you'll need look @ using uasort usort doesn't preserve keys.
Comments
Post a Comment