簡體   English   中英

按值按字母順序對多維數組排序(當前第一行除外)

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM