我有一个多维数组,我想通过"标签"按按字母顺序排序值,当前第一行除外(跳过第一行,按字母顺序排列其他行)。
当前代码:
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
答案 0 :(得分:1)
你可以这样做:
$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);
答案 1 :(得分:-1)
我真的建议您使用随后排序的对象。您可以将它们推送到一个数组中,以便在其末尾有一个已排序对象的数组。
<?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);
?>