Php 多条件关联数组排序
我有一个名为“parents_kids”的表,它有三列,称为:Php 多条件关联数组排序,php,arrays,sorting,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"
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);
一旦我把它放入一个数组,我就按照自定义顺序对它进行排序,其中
首先是有两个孩子的监护人,然后是有一个孩子和三个孩子的监护人
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
有两个主要问题
status
作为第一个键,而它应该是kids
$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);
$result = $pos_a - $pos_b;
if ($result != 0) return $result;
return intval($b['ID']) - intval($a['ID']);
});
var_dump($tables);
你能编辑你的帖子并添加数组的样子吗?为什么不在你的查询中添加一个ORDER BY,让SQL server按照你想要的顺序返回数据呢?这背后有一个更大的代码,记录是使用SQL逐个添加的,因此ORDER BY不适用于它,这就是为什么我将它放入数组并进行排序的原因it@ShoGumLew,如果这不起作用,您将不得不编辑您的示例,因为我对您的示例进行了测试。:)不需要:这就像一个魔咒。。。顺便说一句,你能告诉我在什么地方用“use”来练习这种排序吗keyword@ShoGumLew,我不知道有任何网站提供比较器的具体实践,但如果你想改进你的算法,你可以看看Topcoder。