我有一个名为“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/