我有一个包含3列的表,称为“前缀”,“数字”和“名称”。
我有3个阵列:
$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
我知道我可以这样写: array_multisort($ Prefix,$ Number,$ Name);
并且它们将按$ Prefix排序,但是如何在按$ Prefix排序之后,然后按$ Number对它们进行排序。
答案 0 :(得分:0)
即使您没有在问题描述中指出这一点,我假设每行代表一个数据记录;也就是说,不想要分别对$Prefix
,$Number
和$Name
数组进行盲目排序,然后将它们一起显示在表格中(如上所示)
相反,您希望将每一行视为记录,并按一些任意顺序(例如,名称,前缀和数字)对记录进行排序。
首先,您要创建一个二维数组,其中外部数组将保存每个记录,每个记录都是关联的数组。看起来像这样:
$classes = array(
array("Prefix" => "CIS", "Number" => 8, "Name" => "computer"),
array("Prefix" => "CIS", "Number" => 10, "Name" => "Managing Information Technology")
);
然后,您可以使用usort
,在此处定义排序算法,按Prefix
进行主要排序,然后按Number
进行辅助排序。您所要做的就是首先比较比较函数中的前缀:
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");
有关详细信息,请参阅此链接:http://php.net/manual/en/function.usort.php