如何在1列上排序表,然后在PHP的另一列上排序

  • 本文关键字:排序 一列 然后 1列 PHP php
  • 更新时间 :
  • 英文 :


我有一个表,有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

最新更新