在 PHP 中根據物件欄位排序物件陣列


在 PHP 中,有多種方法可以根據物件欄位對物件陣列進行排序。以下是一些常見的方法

  • 使用 usort() 函式和自定義比較函式

  • 實現自定義排序演算法

  • 利用 array_multisort() 函式

使用 usort() 函式和自定義比較函式

以下是用 usort() 函式和自定義比較函式對 PHP 中的物件陣列根據物件欄位進行排序的示例

// Custom comparison function
function compareByField($a, $b) {
   // Replace 'fieldName' with the actual field you want to sort by
   return $a->fieldName <=> $b->fieldName;
}

// Sort the array using the custom comparison function
usort($array, 'compareByField');

在此示例中,您需要將“fieldName”替換為您要根據其排序物件的實際欄位名稱。usort() 函式將遍歷陣列並呼叫 compareByField 函式,以根據指定的欄位比較每個物件對。比較函式應在 $a 被認為較小時返回負值,在 $a 被認為較大時返回正值,或在它們被認為相等時返回零。

執行此程式碼後,$array 將根據指定的欄位按升序排序。

實現自定義排序演算法

以下是用 PHP 實現自定義排序演算法對物件陣列根據物件欄位進行排序的示例

// Custom sorting algorithm
function sortByField($array, $field) {
   $length = count($array);
   for ($i = 0; $i < $length; $i++) {
      for ($j = $i + 1; $j < $length; $j++) {
         if ($array[$i]->$field > $array[$j]->$field) {
            $temp = $array[$i];
            $array[$i] = $array[$j];
            $array[$j] = $temp;
         }
      }
   }
   return $array;
}

// Sort the array using the custom sorting algorithm
$sortedArray = sortByField($array, 'fieldName');

在此示例中,sortByField() 函式將物件陣列 ($array) 和欄位名稱 ($field) 作為引數。它使用簡單的巢狀迴圈根據指定的欄位比較物件,並在必要時交換其位置以實現升序。

執行此程式碼後,$sortedArray 將包含根據指定欄位按升序排序的物件。

請確保將“fieldName”替換為您要根據其排序物件的實際欄位名稱。

利用 Array_multisort() 函式

以下是用 PHP 利用 array_multisort() 函式對物件陣列根據物件欄位進行排序的示例

// Get an array of the field values to sort by
$fieldName = array_column($array, 'fieldName');

// Sort the array of objects using array_multisort()
array_multisort($fieldName, SORT_ASC, $array);

在此示例中,array_column() 用於從陣列中每個物件的指定欄位 (fieldName) 中提取值。然後,生成的欄位值陣列 ($fieldName) 作為 array_multisort() 的第一個引數使用,隨後是 $array 本身。

SORT_ASC 常量表示排序應按升序進行。如果要按降序排序,則可以使用 SORT_DESC 代替。

執行此程式碼後,$array 將根據指定的欄位按升序排序。

請確保將“fieldName”替換為您要根據其排序物件的實際欄位名稱。

結論

總之,在 PHP 中有多種方法可以根據物件欄位對物件陣列進行排序,例如使用 usort()、array_multisort() 或 array_map() 以及自定義比較函式。可以根據專案的具體需求選擇最合適的方法。

更新於: 2023年8月2日

3K+ 瀏覽量

開啟你的 職業生涯

透過完成課程獲得認證

開始學習
廣告

© . All rights reserved.