在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中文網其他相關文章!