按值按字母顺序对多维数组进行排序,当前第一行除外[重复]

问题描述 投票:0回答:2

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

当前代码:

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
    
php arrays sorting multidimensional-array
2个回答
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
投票
我真的建议你使用然后排序的对象。您可以将它们推入一个数组,这样您就可以在其末尾获得一个排序对象的数组。

<?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); ?>
    
© www.soinside.com 2019 - 2024. All rights reserved.