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