-1

I have an array with states, containing key-value pairs where the key is a company.

I want to sort the array for each state so that the company with the highest value is listed first and the company with the lowest value is listed last.

array(
         [Uttar Pradesh] => Array
                  (
                   [Noida Power Company Ltd] => 111.83
                   [Uttar Pradesh Power Corporation Ltd] => 74.51
                   [Anpara-C TPS] => 72.73
                   [Matatila HPS (UPJVUN)] => 1.88
                   [Rihand Hydro Power Station] => 3.57
                   [Unchahar Solar] => 2.15
                  )

         [Odisha] => Array
                  (
                        [Grid Company of Orissa] => 57.2
                        [Sail Rourkela Steel Plant] => 1.03
                        [GMR Kamalanga Energy Ltd.] => 271.62
                        [Jindal Stainless Ltd, Orissa] => 63.78
                        [Sterlite Energy Limited] => 209.48
                        [Talcher Solar] => 1.69
                   )
)

I want the output array as

array(
    [Uttar Pradesh] => Array
        (
            [Noida Power Company Ltd] => 111.83
            [Uttar Pradesh Power Corporation Ltd] => 74.51
            [Anpara-C TPS] => 72.73
            [Rihand Hydro Power Station] => 3.57
            [Unchahar Solar] => 2.15
            [Matatila HPS (UPJVUN)] => 1.88
        )

    [Odisha] => Array
        (
            [GMR Kamalanga Energy Ltd.] => 271.62
            [Sterlite Energy Limited] => 209.48
            [Jindal Stainless Ltd, Orissa] => 63.78
            [Grid Company of Orissa] => 57.2
            [Talcher Solar] => 1.69
            [Sail Rourkela Steel Plant] => 1.03 
        )

)

I searched over net but could not answer my requirement kindly help me.

Sumurai8
  • 18,213
  • 9
  • 58
  • 88

1 Answers1

1

Loop through your array and use arsort to make your array by sorting values in descending order.

$array = array(
         "Uttar Pradesh" => array
                  (
                   "Noida Power Company Ltd" => 111.83,
                   "Uttar Pradesh Power Corporation Ltd" => 74.51,
                   "Anpara-C TPS" => 72.73,
                   "Matatila HPS (UPJVUN)" => 1.88,
                   "Rihand Hydro Power Station" => 3.57,
                   "Unchahar Solar" => 2.15
                  ),

                "Odisha" => array
                    (
                        "Grid Company of Orissa" => 57.2,
                        "Sail Rourkela Steel Plant" => 1.03,
                        "GMR Kamalanga Energy Ltd." => 271.62,
                        "Jindal Stainless Ltd, Orissa" => 63.78,
                        "Sterlite Energy Limited" => 209.48,
                        "Talcher Solar" => 1.69
                    )
            );

foreach ($array as $key => &$value) {
  arsort($value);
}
echo "<pre>";
print_r($array);
echo "</pre>";

Courtesy: @u_mulder in the comments

Sumurai8
  • 18,213
  • 9
  • 58
  • 88
fortune
  • 3,193
  • 1
  • 17
  • 30