php - 具有多个条件的关联数组排序

标签 php arrays sorting

我有一个名为“parents_kids”的表,它具有三列:

id  Guardian    kids
1   Greg        1
2   Gary        3
3   Aaron       2
4   Farb        3
5   REX         1
6   Fred        2

在下面的代码中,我将其放入数组并打印它:

$exc = $conn->prepare("SELECT ID,Guardian,kids from current_state");
        $exc->execute();
            while($finalResult = $exc->fetch(PDO::FETCH_ASSOC))
             {
                        $tables[] = $finalResult;
             }
var_dump($tables);

一旦我将其放入数组中,我就按照自定义顺序对其进行了排序,其中 首先是有 2 个 child 的监护人,然后是有 1 个 child 和 3 个 child 的监护人

ID    Guardian  kids
3     Aaron     2
6     Fred      2
1     Greg      1
5     REX       1
4     Farb      3
2     Gary      3

现在我的要求是根据数组的 ID 降序对数组的其余部分进行排序,

例如像这样

ID    Guardian  kids
6     Fred      2
3     Aaron     2
5     REX       1
1     Greg      1
4     Farb      3
2     Gary      3

我尝试了很多次,但它不起作用,我用来排序第一个要求的代码如下

$order = array("2", "1", "3");

usort($tables, function ($a, $b) use ($order) {
    $pos_a = array_search($a['kids'], $order);
    $pos_b = array_search($b['kids'], $order);
    return $pos_a - $pos_b;
});

任何人都可以帮助我满足我的第二个要求,即按 ID 对数组进行降序排序

这就是数组的样子

array (size=3)
  0 => 
    array (size=3)
      'ID' => string '3' (length=1)
      'Guardian' => string 'Aaron' (length=5)
      'kids' => string '2' (length=1)

array (size=3)
  1 => 
    array (size=3)
      'ID' => string '6' (length=1)
      'Guardian' => string 'FRED' (length=4)
      'kids' => string '2' (length=1) 

等等

P.S 从表中执行此操作是行不通的,因为我在代码上方使用了循环,这使得无法从 SQL 执行此操作,任何人都可以告诉我一种从 php 执行此操作的方法

最佳答案

我认为它应该有帮助:

select ID,Guardian,kids
from current_state
order by case WHEN kids = 2 then 1
              WHEN kids = 1 then 2
              WHEN kids = 3 then 3
              ELSE kids END ASC
, ID desc

关于php - 具有多个条件的关联数组排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28805970/

相关文章:

string - 对字符串数组进行排序,以便任何其他字符串的子字符串稍后出现

php - 在 html/php 页面中调用 Jquery 类

php - 如何使用 PHP 代码或 Shotcode 显示 WooCommerce 下载表

php - 使用单个 MySQL 查询统计所有不同记录关系

有人可以告诉我这有什么问题吗?

c++ - 如何将用户输入添加到数组或删除它? C++

php - 使用 FOSRestBundle 将 POST 请求主体序列化为数组

arrays - 数组上的 Lua 展开运算符

c++ - 无法使用自定义比较器功能对列表进行排序

sorting - JAXB 强制对集合进行排序