Сортировка многомерного массива с сохранением индекса в PHP - PullRequest
0 голосов
/ 27 января 2020

Я сортирую этот массив

$array =
 ( 
     [Scorebord] => Hyperscore [Ontmoeting_ID] => 1540 [ThuisPloeg_ID] => 1257 [UitPloeg_ID] => 1246 [Wedstrijden] => Array (
          [0] => Array (
              [Wedstrijd_ID] => 15401 [Speler_Thuis_ID] => 12669 [Speler_Thuis_TSP] => 17) 
          [1] => Array (
              [Wedstrijd_ID] => 15402 [Speler_Thuis_ID] => 12713 [Speler_Thuis_TSP] => 21) 
          [2] => Array (
              [Wedstrijd_ID] => 15403 [Speler_Thuis_ID] => 12656 [Speler_Thuis_TSP] => 23) 
          [3] => Array (
              [Wedstrijd_ID] => 15404 [Speler_Thuis_ID] => 12912 [Speler_Thuis_TSP] => 19)
      )
 )

с "Speler_Thuis_TSP" в качестве критерия через этот код:

     usort($json_sorted['Wedstrijden'], function($a,$b){
          $c = $a['Speler_Thuis_TSP'] - $b['Speler_Thuis_TSP'];
          return $c;
     });

, который дает мне этот массив:

 ( 
     [Scorebord] => Hyperscore [Ontmoeting_ID] => 1540 [ThuisPloeg_ID] => 1257 [UitPloeg_ID] => 1246 [Wedstrijden] => Array (
          [0] => Array (
              [Wedstrijd_ID] => 15401 [Speler_Thuis_ID] => 12669 [Speler_Thuis_TSP] => 17) 
          [1] => Array (
              [Wedstrijd_ID] => 15404 [Speler_Thuis_ID] => 12912 [Speler_Thuis_TSP] => 19)
          [2] => Array ( 
              [Wedstrijd_ID] => 15402 [Speler_Thuis_ID] => 12713 [Speler_Thuis_TSP] => 21) 
          [3] => Array (
              [Wedstrijd_ID] => 15403 [Speler_Thuis_ID] => 12656 [Speler_Thuis_TSP] => 23) 
      )
 )

Проблема в том, что "Wedstrijd_ID" должен оставаться в исходном порядке, ie сначала 15401, затем 15402, 15403 и 15404. Есть идеи, как это исправить? Большое спасибо заранее ...

1 Ответ

0 голосов
/ 27 января 2020

Из этого решения вы можете получить исходный порядок с помощью array_column, а затем просто перезаписать новые значения порядка, просто заменив новые упорядоченные значения на значения array_column.

$original_id_order = array_column($json_sorted['Wedstrijden'], 'Wedstrijd_ID');

usort($json_sorted['Wedstrijden'], function($a,$b){
          $c = $a['Speler_Thuis_TSP'] - $b['Speler_Thuis_TSP'];
          return $c;
     });

foreach($json_sorted['Wedstrijden'] as $key => $value){

    $json_sorted['Wedstrijden'][$key]['Wedstrijd_ID'] = $original_id_order[$key];
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...