Создание многомерного массива в PHP

Я получаю результат запроса базы данных, который представляет собой массив, и выглядит следующим образом:

[{"uid":29,"totalAmount":"5400.00"}, {"uid":499,"totalAmount":"5400.00"}, {"uid":507,"totalAmount":"3960.00"}, {"uid":497,"totalAmount":"3960.00"}, {"uid":498,"totalAmount":"3960.00"}, {"uid":34,"totalAmount":"3960.00"}, {"uid":21,"totalAmount":"3240.00"}, {"uid":27,"totalAmount":"2880.00"}, {"uid":500,"totalAmount":"2880.00"}, {"uid":19,"totalAmount":"2700.00"}, {"uid":22,"totalAmount":"2700.00"}, {"uid":20,"totalAmount":"2520.00"}, {"uid":23,"totalAmount":"2520.00"}, {"uid":504,"totalAmount":"1800.00"}, {"uid":496,"totalAmount":"1440.00"}, {"uid":26,"totalAmount":"1260.00"}, {"uid":491,"totalAmount":"1080.00"}, {"uid":492,"totalAmount":"720.00"}, {"uid":464,"totalAmount":"540.00"}, {"uid":493,"totalAmount":"540.00"}, {"uid":76,"totalAmount":"540.00"}, {"uid":505,"totalAmount":"180.00"}, {"uid":506,"totalAmount":"180.00"}, {"uid":494,"totalAmount":"180.00"}, {"uid":495,"totalAmount":"180.00"}] 

Из этого результата я хочу создать многомерный массив, который будет выглядеть следующим образом:

 [ "0" => [ "0"=>["uid"=>29, "totalAmount"=>5400 ], "1"=>["uid"=>499, "totalAmount"=>5400] ], "1" => [ "0"=>["uid"=>507, "totalAmount"=>3960 ], "1"=>["uid"=>497, "totalAmount"=>3960], "2"=>["uid"=>498, "totalAmount"=>3960 ], "3"=>["uid"=>34, "totalAmount"=>3960], ], ] // and so on ... 

Я пробовал с foreach :

  $topEar = []; $amount = ''; foreach( $topEarners as $te) { array_push($topEar, [$te->uid=>$te->totalAmount]); } $topEar; 

Solutions Collecting From Web of "Создание многомерного массива в PHP"

Вы можете сделать что-то вроде этого:

 $topEar = array(); $currAmountArray = array(); $amount = null; foreach( $topEarners as $te) { if( !is_null($amount) && $te->totalAmount != $amount ) { array_push($topEar, $currAmountArray); $currAmountArray = array(); } array_push($currAmountArray, $te); $amount = $te->totalAmount; } if( !empty($currAmountArray) ) { array_push($topEar, $currAmountArray); } print_r($topEar); 

Вы сохраняете последний $totalAmount на каждой итерации и до тех пор, пока он не изменяется – вы сохраняете значения в $currAmountArray именем $currAmountArray , когда $totalAmount меняет значения на основной массив.

Я также добавил условие после цикла foreach , чтобы убедиться, что последняя основная масса данных в $currAmountArray также будет перенесена в основной массив (который равен $topEar ).

Если вы не можете получить нужную структуру с использованием SQL, это будет самым простым способом в PHP:

 $topEarners = json_decode($json, true); foreach($topEarners as $row) { $result[$row['totalAmount']][] = $row; } 
  • Расшифруйте JSON в массив PHP
  • Loop и добавьте массив, используя totalAmount в качестве ключа

Если вы хотите сбросить ключи:

 $result = array_values($result);