我有一个表,有3列,名为"前缀","数字"one_answers"名称"。
我有三个数组:
$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排序呢
尽管您没有在问题描述中指出这一点,但我假设每行代表一个数据记录;也就是说,您不希望盲目地将$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