如何在 PHP 中根據給定的鍵值對關聯陣列進行排序

Minahil Noor 2023年1月30日 2020年10月15日
  1. 在 PHP 中使用 array_multisort() 函式根據給定的鍵值對關聯陣列進行排序
  2. 在 PHP 中使用 usort() 函式根據給定的鍵值對關聯陣列進行排序
如何在 PHP 中根據給定的鍵值對關聯陣列進行排序

本文將介紹在 PHP 中根據給定的鍵值對一個陣列的關聯陣列進行排序的方法。

  • 使用 array_multisort() 函式
  • 使用 usort() 函式

在 PHP 中使用 array_multisort() 函式根據給定的鍵值對關聯陣列進行排序

我們可以使用內建函式 array_multisort(),按照給定的鍵值對關聯陣列的陣列進行排序。它可以一次對多個陣列或一個多維陣列進行排序。使用該函式的正確語法如下

str_replace($arrayName, $sort_order, $sort_flags);

內建的函式 array_multisort() 有三個引數。它的詳細引數如下:

引數 說明
$arrayName 強制 這是我們要排序的陣列
$sort_order 可選 它告訴我們陣列的排序順序。它可以是 SORT_ASC 代表升序,SORT_DESC 代表降序。它的預設值是 SORT_ASC
$sort_flags 可選 它指定了排序的選項。你可以在這裡得到更多資訊。

如果成功,此函式將返回 True。否則,它返回 False

下面的程式顯示了我們如何使用 array_multisort() 函式對一個關聯陣列按給定鍵的值進行排序。

<?php 
$result = array(

   array("firstname"=>"Olivia", "marks"=>85),
   array("firstname"=>"Jacob", "marks"=>60),
   array("firstname"=>"Henry", "marks"=>100),
   array("firstname"=>"Lili", "marks"=>40),
   array("firstname"=>"Stefan", "marks"=>5),
   array("firstname"=>"Bonnie", "marks"=>97),
);
$marks = array();
foreach ($result as $key => $row)
{
    $marks[$key] = $row['marks'];
    
}
array_multisort($marks, SORT_DESC, $result);
print_r($result);  
?> 

我們已經建立了一個陣列 $marks,其中包含了原始陣列中的標記。之後,我們使用 array_multisort() 函式根據 $result 陣列對 $marks 陣列進行排序。輸出將是排序後的 $result 陣列。

輸出:

Array
(
    [0] => Array
        (
            [firstname] => Henry
            [marks] => 100
        )

    [1] => Array
        (
            [firstname] => Bonnie
            [marks] => 97
        )

    [2] => Array
        (
            [firstname] => Olivia
            [marks] => 85
        )

    [3] => Array
        (
            [firstname] => Jacob
            [marks] => 60
        )

    [4] => Array
        (
            [firstname] => Lili
            [marks] => 40
        )

    [5] => Array
        (
            [firstname] => Stefan
            [marks] => 5
        )

)

陣列是根據 marks 鍵的值降序排列的。

在 PHP 中使用 usort() 函式根據給定的鍵值對關聯陣列進行排序

在 PHP 中,我們還可以使用 usort() 函式,根據給定的鍵值對關聯陣列的陣列進行排序。這個函式使用使用者定義的函式對陣列進行排序。使用該函式的正確語法如下。

preg_replace($arrayName, $functionName);

函式 usort() 接受兩個引數。其詳細引數如下

引數 說明
$arrayName 強制 我們要排序的是陣列
$functionName 強制 它是使用者自定義的函式,將對傳遞的陣列進行排序。

如果成功,則返回 True,否則返回 False。對陣列進行排序的程式如下。

<?php 
function DescSort($item1,$item2)
{
    if ($item1['marks'] == $item2['marks']) return 0;
    return ($item1['marks'] < $item2['marks']) ? 1 : -1;
}
$result = array(

   array("firstname"=>"Olivia", "marks"=>85),
   array("firstname"=>"Jacob", "marks"=>60),
   array("firstname"=>"Henry", "marks"=>100),
   array("firstname"=>"Lili", "marks"=>40),
   array("firstname"=>"Stefan", "marks"=>5),
   array("firstname"=>"Bonnie", "marks"=>97),
);
usort($result,'DescSort');
print_r($result);
?> 

輸出:

Array
(
    [0] => Array
        (
            [firstname] => Henry
            [marks] => 100
        )

    [1] => Array
        (
            [firstname] => Bonnie
            [marks] => 97
        )

    [2] => Array
        (
            [firstname] => Olivia
            [marks] => 85
        )

    [3] => Array
        (
            [firstname] => Jacob
            [marks] => 60
        )

    [4] => Array
        (
            [firstname] => Lili
            [marks] => 40
        )

    [5] => Array
        (
            [firstname] => Stefan
            [marks] => 5
        )

)

對於升序排序,該函式將是:

<?php 
function AscSort($item1,$item2)
{
    if ($item1['marks'] == $item2['marks']) return 0;
    return ($item1['marks'] > $item2['marks']) ? 1 : -1;
}
$result = array(

   array("firstname"=>"Olivia", "marks"=>85),
   array("firstname"=>"Jacob", "marks"=>60),
   array("firstname"=>"Henry", "marks"=>100),
   array("firstname"=>"Lili", "marks"=>40),
   array("firstname"=>"Stefan", "marks"=>5),
   array("firstname"=>"Bonnie", "marks"=>97),
);
usort($result,'AscSort');
print_r($result);
?> 

輸出:

Array
(
    [0] => Array
        (
            [firstname] => Stefan
            [marks] => 5
        )

    [1] => Array
        (
            [firstname] => Lili
            [marks] => 40
        )

    [2] => Array
        (
            [firstname] => Jacob
            [marks] => 60
        )

    [3] => Array
        (
            [firstname] => Olivia
            [marks] => 85
        )

    [4] => Array
        (
            [firstname] => Bonnie
            [marks] => 97
        )

    [5] => Array
        (
            [firstname] => Henry
            [marks] => 100
        )

)

相關文章 - PHP Array