📜  如何在PHP中按给定键的值对关联数组的数组进行排序?

📅  最后修改于: 2022-05-13 01:56:54.630000             🧑  作者: Mango

如何在PHP中按给定键的值对关联数组的数组进行排序?

关联数组中的每个条目都由一个唯一的键值对来表征。数组可以包含属于变量或其他数组的单一数据类型作为其元素。有多种方法可以按指定键的值对关联数组的数组进行排序。

方法 1:使用array_multisort()方法

array_multisort()方法用于返回排序后的数组。字符串键会保留,但数字键会重新索引,它们从 0 开始并增加 1。此函数可以一次对多个数组或多维数组进行排序。

array_multisort(array, sort_order, sort_type);

示例:在这种方法中,最初定义了一个关联数组的数组。然后,创建一个新数组,以便将键存储为我们希望排序的主数组的属性。然后将 array_multisort() 方法应用于这个创建的数组和所需的排序类型。如果两个或多个键相同,则值按存储顺序显示。

PHP
"YASHIKA", "marks"=>22),
   array("Name"=>"ASHIKA", "marks"=>67),
   array("Name"=>"BASHIKA", "marks"=>87),
   array("Name"=>"YASHITA", "marks"=>24),
   array("Name"=>"AMAN", "marks"=>55),
   array("Name"=>"ANjali", "marks"=>98),
   array("Name"=>"YASHIKA", "marks"=>100),   
);
#declaring an array to store names
$names = array();
#iterating over the arr
foreach ($arr as $key => $val)
{
  #storing the key of the names array as the Name key of the arr
    $names[$key] = $val['Name'];
      
}
#apply multisort method
array_multisort($names, SORT_ASC, $arr);
print_r("Modified Array : ");
print_r($arr);  
?>


PHP
"YASHIKA", "marks"=>22),
   array("Name"=>"ASHIKA", "marks"=>67),
   array("Name"=>"BASHIKA", "marks"=>87),
   array("Name"=>"YASHITA", "marks"=>24),
   array("Name"=>"AMAN", "marks"=>55),
   array("Name"=>"ANjali", "marks"=>98),
   array("Name"=>"YASHIKA", "marks"=>100),   
);
#apply usort method on the array
usort($arr,'DescSort');
print_r("Modified Array : ");
print_r($arr);
?>


输出:

Modified Array : Array
(
    [0] => Array
        (
            [Name] => AMAN
            [marks] => 55
        )

    [1] => Array
        (
            [Name] => ANjali
            [marks] => 98
        )

    [2] => Array
        (
            [Name] => ASHIKA
            [marks] => 67
        )

    [3] => Array
        (
            [Name] => BASHIKA
            [marks] => 87
        )

    [4] => Array
        (
            [Name] => YASHIKA
            [marks] => 22
        )

    [5] => Array
        (
            [Name] => YASHIKA
            [marks] => 100
        )

    [6] => Array
        (
            [Name] => YASHITA
            [marks] => 24
        )
)

说明:主数组按名称升序排列。

方法 2:使用usort() 方法

此方法使用用户定义的比较函数对给定数组进行排序。如果第一个参数是 <、= 或 > 而不是第二个参数,则用户定义的函数应返回一个整数 <、= 或 >,而不是 0。此方法将新键分配给数组中的元素。它只是删除可能已分配的任何现有键,而不仅仅是重新排序键。

usort(array, user_def_func)

例子:

PHP

"YASHIKA", "marks"=>22),
   array("Name"=>"ASHIKA", "marks"=>67),
   array("Name"=>"BASHIKA", "marks"=>87),
   array("Name"=>"YASHITA", "marks"=>24),
   array("Name"=>"AMAN", "marks"=>55),
   array("Name"=>"ANjali", "marks"=>98),
   array("Name"=>"YASHIKA", "marks"=>100),   
);
#apply usort method on the array
usort($arr,'DescSort');
print_r("Modified Array : ");
print_r($arr);
?>

输出: DescSort() 方法按降序对标记进行排序。

Modified Array : Array
(
    [0] => Array
        (
            [Name] => YASHIKA
            [marks] => 100
        )

    [1] => Array
        (
            [Name] => ANjali
            [marks] => 98
        )

    [2] => Array
        (
            [Name] => BASHIKA
            [marks] => 87
        )

    [3] => Array
        (
            [Name] => ASHIKA
            [marks] => 67
        )

    [4] => Array
        (
            [Name] => AMAN
            [marks] => 55
        )

    [5] => Array
        (
            [Name] => YASHITA
            [marks] => 24
        )

    [6] => Array
        (
            [Name] => YASHIKA
            [marks] => 22
        )
)