在PHP中,如何在一列上对表排序,然后在另一列上排序
我有一个3列的表,叫做“Prefix”、“Number”和“Name” 我有3个阵列:在PHP中,如何在一列上对表排序,然后在另一列上排序,php,Php,我有一个3列的表,叫做“Prefix”、“Number”和“Name” 我有3个阵列: $Prefix, $Number, $Name, 这些数据应该显示在我的表格中。我必须说$prefix[0]、$Number[0]和$Name[0]显示在第一行中,以此类推 我必须对我的表进行排序,以便它们根据前缀进行排序,然后对于具有相同前缀的表,它们应该按数字进行排序 这是我表格中数据的一个示例: Prefix Number Name CIS 8
$Prefix, $Number, $Name,
这些数据应该显示在我的表格中。我必须说$prefix[0]、$Number[0]和$Name[0]显示在第一行中,以此类推
我必须对我的表进行排序,以便它们根据前缀进行排序,然后对于具有相同前缀的表,它们应该按数字进行排序
这是我表格中数据的一个示例:
Prefix Number Name
CIS 8 computer
CIS 10 Managing Information Technology
CIS 20 Data Structures
CIS 30 Cooperative Education
GEO 6 Managerial Economics
GEO 12 History of Economic Thought
我知道我可以这样写:
数组_multisort($Prefix,$Number,$Name)
它们将按$Prefix排序,但如何在按$Prefix排序后,再按$Number排序。即使您在问题描述中没有指出这一点,我还是假设每一行代表一条数据记录;也就是说,您不想盲目地对
$Prefix
、$Number
和$Name
数组分别排序,然后将它们一起显示在一个表中(如上所述)
更确切地说,你想把每一行看作一条记录,并按任意顺序排序记录(例如名称、前缀和数字)。
首先,您要创建一个二维数组,其中外部数组将保存每条记录,每条记录都是一个关联数组。看起来像这样的东西:$classes = array(
array("Prefix" => "CIS", "Number" => 8, "Name" => "computer"),
array("Prefix" => "CIS", "Number" => 10, "Name" => "Managing Information Technology")
);
然后可以使用usort
,在这里定义排序算法,按前缀进行主排序,然后按编号进行次排序。您需要做的就是首先比较比较比较函数中的前缀:
function compare_classes($a, $b) {
if(result = strcmp($a['Prefix'], $b['Prefix']) != 0)
return result;
if((result = $a['Number'] - $b['Number']) != 0)
return result;
return strcmp($a['Name'], $b['Name']);
}
我没有测试这个,但我想你明白了。这本质上为您提供了二级和三级排序。定义此函数后,将数组和函数传递给usort
usort($classes, "compare_classes");
有关更多详细信息,请参阅此链接:能否先在数据库级别对其进行排序?是的,理论上,数据可以以任何顺序输出,但实际上,它是按照sql排序顺序指定的顺序输出的。