首頁 > 後端開發 > php教程 > 如何依子數組的值對多維 PHP 數組進行排序?

如何依子數組的值對多維 PHP 數組進行排序?

Linda Hamilton
發布: 2024-12-07 05:42:14
原創
846 人瀏覽過

How Can I Sort a Multidimensional PHP Array by a Subarray's Value?

在PHP 中按子數組值對數組進行排序

對資料結構進行排序是一項常見的程式設計任務,數組組經常用於儲存和管理資訊的集合。在 PHP 中,陣列可以包含巢狀結構,包括將陣列作為值。對多維數組進行排序可以出於多種原因發揮作用,例如組織資料或提取特定元素。

問題陳述:

考慮以下數組結構:

$array = [
    [
        'configuration_id' => 10,
        'id' => 1,
        'optionNumber' => 3,
        'optionActive' => 1,
        'lastUpdated' => '2010-03-17 15:44:12'
    ],
    [
        'configuration_id' => 9,
        'id' => 1,
        'optionNumber' => 2,
        'optionActive' => 1,
        'lastUpdated' => '2010-03-17 15:44:12'
    ],
    [
        'configuration_id' => 8,
        'id' => 1,
        'optionNumber' => 1,
        'optionActive' => 1,
        'lastUpdated' => '2010-03-17 15:44:12'
    ],
];
登入後複製

目標是根據 'optionNumber'鍵以增量方式對該數組進行排序,從而得到以下:

$sortedArray = [
    [
        'configuration_id' => 8,
        'id' => 1,
        'optionNumber' => 1,
        'optionActive' => 1,
        'lastUpdated' => '2010-03-17 15:44:12'
    ],
    [
        'configuration_id' => 9,
        'id' => 1,
        'optionNumber' => 2,
        'optionActive' => 1,
        'lastUpdated' => '2010-03-17 15:44:12'
    ],
    [
        'configuration_id' => 10,
        'id' => 1,
        'optionNumber' => 3,
        'optionActive' => 1,
        'lastUpdated' => '2010-03-17 15:44:12'
    ],
];
登入後複製

解決方案:

要對數組進行排序,我們可以利用PHP 的usort 函數。 usort 接受兩個參數:要排序的陣列和確定元素順序的比較函數。如果第一個元素應該在第二個元素之前,則比較函數應傳回負值;如果它們相等,則比較函數應傳回零;如果第一個元素應在第二個元素之後,則比較函數應傳回正值。

在這種情況下,我們的比較函數可以定義如下:

function cmp_by_optionNumber($a, $b) {
  return $a['optionNumber'] - $b['optionNumber'];
}
登入後複製

此函數從第二個陣列中減去第一個陣列的「optionNumber」值,如果第一個元素應該出現在第二個元素之前,則結果為負值,即零如果它們相等,則為正值;如果第一個元素應該在第二個元素之後,則為正值。

要將此比較函數與usort 一起使用,我們只需將其作為第二個參數傳遞:

usort($array, 'cmp_by_optionNumber');
登入後複製

這將對數組進行就地排序,修改原始$array變數以反映排序順序。產生的 $array 變數將與前面提供的 $sortedArray 範例相同。

替代語法:

在PHP 5.3 及更高版本中,可以使用匿名函數而不是指定的比較函數:

usort($array, function ($a, $b) {
  return $a['optionNumber'] - $b['optionNumber'];
});
登入後複製

PHP 7.0 與上圖:

在PHP 7.0 及更高版本中,太空船運算子 可以在比較函數中代替減法來防止溢位/截斷問題:

usort($array, function ($a, $b) {
  return $a['optionNumber'] <=> $b['optionNumber'];
});
登入後複製

以上是如何依子數組的值對多維 PHP 數組進行排序?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板