Упорядочить массив в PHP - PullRequest
0 голосов
/ 03 мая 2020

Как мне отсортировать массив ["Name": "OVERALL"] всегда последним в элементе массива. Этот массив ["Name": "OVERALL"] всегда находится в индексе 1. Я думаю, что мой текущий метод не очень хорошая реализация. Есть ли лучшие способы?

[
  ["Name":"AHMAD SUFFIAN BIN AHMAD LOTFI","SLAData":[0,0,0,0,0,0],"RatingData":[0,0,0,0,0,0]],
  ["Name":"OVERALL","SLAData":[19,8,50,0,0,100],"RatingData":[95,95,100,0,0,0]],
  ["Name":"JAYALETCHUMI A\/P VENGADASALAM","SLAData":[33,14,100,0,0,0],"RatingData":[90,90,100,0,0,0]],
  ["Name":"MOHAMMAD FIRDHAUS BIN ISMAIL","SLAData":[0,0,0,0,0,0],"RatingData":[100,100,0,0,0,0]],
  ["Name":"YOGESWARAN A\/L PUSSAN","SLAData":[0,0,0,0,0,0],"RatingData":[0,0,0,0,0,0]],
  ["Name":"JAYAKUMAR PARAMASIVAM","SLAData":[0,0,0,0,0,100],"RatingData":[0,0,0,0,0,0]]
]

Это мой текущий метод

$Temp=[];
$output = array_slice($MonthlyData, 1, 1);
foreach ($MonthlyData as $data) {
    if($data['Name']!='OVERALL')
       $Temp[] = $data;
    }
}
$Temp[] = $output;
$MonthlyData = $Temp;

1 Ответ

1 голос
/ 03 мая 2020

Есть несколько способов сделать это. Я выбрал способ, который не требует значительного изменения кода. Все, что делает этот код, это добавляет элементы в front временного массива, если только вы не хотите быть последним. Тот, который он помещает в конец массива.

$MonthlyData = [
    ["Name" => "AHMAD SUFFIAN BIN AHMAD LOTFI","SLAData" => [0,0,0,0,0,0],"RatingData" => [0,0,0,0,0,0]],
    ["Name" => "OVERALL","SLAData" => [19,8,50,0,0,100],"RatingData" => [95,95,100,0,0,0]],
    ["Name" => "JAYALETCHUMI A\/P VENGADASALAM","SLAData" => [33,14,100,0,0,0],"RatingData" => [90,90,100,0,0,0]],
    ["Name" => "MOHAMMAD FIRDHAUS BIN ISMAIL","SLAData" => [0,0,0,0,0,0],"RatingData" => [100,100,0,0,0,0]],
    ["Name" => "YOGESWARAN A\/L PUSSAN","SLAData" => [0,0,0,0,0,0],"RatingData" => [0,0,0,0,0,0]],
    ["Name" => "JAYAKUMAR PARAMASIVAM","SLAData" => [0,0,0,0,0,100],"RatingData" => [0,0,0,0,0,0]]
];


$Temp=[];
foreach ($MonthlyData as $data) {
    if ($data['Name'] === 'OVERALL') {
        $Temp[] = $data;
    }
    else {
        array_unshift($Temp, $data);
    }
}
$MonthlyData = $Temp;

Демо

Если вы хотите более краткий способ сделать это, используйте usort() для сортировки на основе указанных критериев. В этом случае всегда ставьте массив последним, если его «name» имеет значение «OVERALL».

usort($MonthlyData, static function ($a, $b) {
    return ($a['Name'] === 'OVERALL') ? 1 : -1;
});

Demo

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...