0

I have a multidimensional array containing month names.I want to sort by month name like jan.feb,march.I have tried usort,multi_sort etc but these methods are not able to short them. So looking for some other solution for this.

Array
(
    [0] => Array
        (
        [netDed] => 22128.00
        [netEran] => 91032.00
        [compiled_month] => Mar/2021
    )

[1] => Array
    (
        [netDed] => 22970.00
        [netEran] => 71330.00
        [compiled_month] => May/2021
    )

[2] => Array
    (
        [netDed] => 22970.00
        [netEran] => 71330.00
        [compiled_month] => Jun/2021
    )

[3] => Array
    (
        [netDed] => 65970.00
        [netEran] => 28330.00
        [compiled_month] => Jul/2021
    )

[4] => Array
    (
        [netDed] => 10396.00
        [netEran] => 27324.00
        [compiled_month] => Jan/2021
    )

[5] => Array
    (
        [netDed] => 20792.00
        [netEran] => 54648.00
        [compiled_month] => Feb/2021
    ))

Thank you! (in advance)

Alive to die - Anant
  • 70,531
  • 10
  • 51
  • 98
Miya
  • 33
  • 7
  • can you edit the array and make var_export , to make test of it – Jerson Feb 04 '21 at 07:11
  • No,I want to sort month wise not alphabetical order – Miya Feb 04 '21 at 07:12
  • @Jerson var_export array : array ( 0 => array ( 'netDed' => '17772.00', 'netEran' => '57668.00', 'compiled_month' => 'Apr/2021', ), 1 => array ( 'netDed' => '20792.00', 'netEran' => '54648.00', 'compiled_month' => 'Feb/2021', ), 2 => array ( 'netDed' => '10396.00', 'netEran' => '27324.00', 'compiled_month' => 'Jan/2021', ), 3 => array ( 'netDed' => '65970.00', 'netEran' => '28330.00', 'compiled_month' => 'Jul/2021', ), 4 => array ( 'netDed' => '22970.00', 'netEran' => '71330.00', 'compiled_month' => 'Jun/2021', ),) – Miya Feb 04 '21 at 07:15
  • You will have to change the date format on the duplicate to `'M/Y'`, but it should work with that. – Nigel Ren Feb 04 '21 at 07:24

1 Answers1

1

An approach, using usort() and the appropriate comparison function is an option:

<?php
$array = array(
    array("netDe" => 22970.00, "netEran" => 71330.00, "compiled_month" => "May/2021"),
    array("netDe" => 22970.00, "netEran" => 71330.00, "compiled_month" => "Jun/2021"),
    array("netDe" => 65970.00, "netEran" => 28330.00, "compiled_month" => "Jul/2021"),
    array("netDe" => 10396.00, "netEran" => 27324.00, "compiled_month" => "Jan/2021"),
    array("netDe" => 20792.00, "netEran" => 54648.00, "compiled_month" => "Feb/2021" )
);

usort(
    $array, 
    function ($a, $b) {
       return 
          DateTime::createFromFormat('d/M/Y', "01/".$a["compiled_month"]) <=>
          DateTime::createFromFormat('d/M/Y', "01/".$b["compiled_month"]);
    }
);
?>
Zhorov
  • 28,486
  • 6
  • 27
  • 52