在PHP中,如何在一列上对表排序,然后在另一列上排序

在PHP中,如何在一列上对表排序,然后在另一列上排序,php,Php,我有一个3列的表,叫做“Prefix”、“Number”和“Name” 我有3个阵列: $Prefix, $Number, $Name, 这些数据应该显示在我的表格中。我必须说$prefix[0]、$Number[0]和$Name[0]显示在第一行中,以此类推 我必须对我的表进行排序,以便它们根据前缀进行排序,然后对于具有相同前缀的表,它们应该按数字进行排序 这是我表格中数据的一个示例: Prefix Number Name CIS 8

我有一个3列的表,叫做“Prefix”、“Number”和“Name”

我有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
我知道我可以这样写: 数组_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排序顺序指定的顺序输出的。