我有一个多维数组,我想按“标签”值按字母顺序排序,除了当前第一行(跳过第一行,按字母顺序排列其他行)。
当前代码:
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,您的循环可以替换为对 的调用。 所以脚本就变成:
$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);
?>