如何在 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
)
)