[英]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.