如何在 PHP 中根據給定的鍵值對關聯陣列進行排序
Minahil Noor
2023年1月30日
2020年10月15日
本文將介紹在 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
)
)