[英]Sort Multidimensional Array by Value Alphabetically, Except for the Current First Row
我有一個多維數組,除了當前的第一行 (跳過第一行,按字母順序排列其他行),我想按 “標簽”值按字母順序排序。
當前代碼:
foreach ($values as $key => $row) {
$val[$key] = $row['label'];
}
array_multisort($val, SORT_ASC, $values);
數組示例:
id label
0 blue
1 orange
2 red
3 yellow
4 green
5 violet
6 black
當前代碼正在對所有內容進行排序。 我需要將它們分成2個數組,進行排序,然后將它們加入,還是有更簡單的方法?
最終結果應如下所示:
id label
0 blue
6 black
4 green
1 orange
2 red
5 violet
3 yellow
您可以這樣做:
$val[0] = ""; // fix first row
...在應用排序之前。 因此,只需將第一個標簽替換為空字符串,該字符串將被排序到第一個位置。 請注意,這些標簽是副本,因此此操作不會影響您的2D陣列。
注意:如果您使用的PHP版本> = 5.5,則可以使用對array_column
的調用來替換循環。
因此,腳本將變為:
$val = array_column($values, 'label');
$val[0] = ""; // fix first row
array_multisort($val, SORT_ASC, $values);
我真的建議您使用隨后進行排序的對象。 您可以將它們壓入一個數組,以便在其末尾有一個排序對象數組。
<?php
// This is a fake array below that you would replace
$values = ['blue', 'green', 'yellow', 'gray'];
// Array of objects
$object_array = [];
foreach ($values as $key => $row) {
$item = (object) [
'id' => $key,
'label' => $row,
];
$object_array[] = $item;
}
// Create the custom sort function
function sort_labels($a, $b) {
return strcmp($a->label, $b->label);
}
// Call the custom sort function using usort
usort($object_array, "sort_labels");
// Prints out the sorted object array
print_r($object_array);
?>
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.