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