按字母顺序按值排序多维数组,但当前第一行除外

时间:2017-01-17 18:53:41

标签: php arrays sorting multidimensional-array

我有一个多维数组,我想通过"标签"按按字母顺序排序当前第一行除外(跳过第一行,按字母顺序排列其他行)。

当前代码:

        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

2 个答案:

答案 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);

?>