【问题标题】:Arrange Array in PHP在 PHP 中排列数组
【发布时间】:2020-05-03 19:13:57
【问题描述】:

如何排序数组 ["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;

【问题讨论】:

  • 你唯一的要求是让数组的那个元素成为最后一个吗? $MonthlyData 总是按这个顺序吗?
  • 是的。因为这些数据将与 chartjs 一起使用,我希望整体显示在标签的最后。 $MonthlyData 可能会根据人员列表而变化,但总体始终位于索引 1 上。

标签: php arrays sorting


【解决方案1】:

有多种方法可以做到这一点。我选择了一种不需要更改您提供的代码的方式。这段代码所做的只是将元素添加到临时数组的 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;

Demo

如果您想要更简洁的方式,请使用usort() 根据指定条件进行排序。在这种情况下,如果“名称”值为“OVERALL”,则始终将数组放在最后。

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

Demo

【讨论】:

  • 谢谢。我喜欢usort() 方法。
猜你喜欢
  • 1970-01-01
  • 2023-03-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-05-30
  • 1970-01-01
  • 2011-07-17
相关资源
最近更新 更多