排序多维数组由给定的指标 - PHP? [英] Sort Multi-dimensional Array by given indexes - PHP?
问题描述
我有两个阵列 $ days_order
和 $ mysql_result
,我想排序 $ mysql_result
使用 $ days_order
数组的数组。我想显示的MySQL结果在几天顺序递增?有没有办法做到这一点,或任何其他方式,这样我可以通过 $ days_order
在排序依据
MySQL查询部分?
$ days_order =阵列([0] =→2 [1] =→3 [2] =→4 [3] =→5 [4] =&GT 6 [5] =大于7 [6] =→1);$ mysql_result =阵列( [0] =>排列
(
[主题标签] => a7e87329b5eab8578f4f1098a152d6f4
[标题] =>花
[日] => 3
)[1] =>排列
(
[主题标签] => b24ce0cd392a5b0b8dedc66c25213594
[标题] =>自由
[日] => 2
)[2] =>排列
(
[主题标签] => e7d31fc0602fb2ede144d18cdffd816b
[标题] =>准备
[日] => 1
)
)
我想在 $ days_order
输出:
阵列
(
[0] =>排列
(
[主题标签] => b24ce0cd392a5b0b8dedc66c25213594
[标题] =>自由
[日] => 2
)
[1] =>排列
(
[主题标签] => a7e87329b5eab8578f4f1098a152d6f4
[标题] =>花
[日] => 3
) [2] =>排列
(
[主题标签] => e7d31fc0602fb2ede144d18cdffd816b
[标题] =>准备
[日] => 1
)
)
您可以使用
自定义命令序列中的usort <比较函数/ code>是这样的:
usort($ mysql_result,函数($ A,$ B)使用($ days_order){
//然后检查每个元素的天值的位置
//针对$ days_order该值的位置。
$ a = array_search($ A ['天'],$ days_order);
$ B = array_search($ B ['天'],$ days_order);
如果($ A&LT; $ B)返回-1;
如果($ A == $ b)退回0;
返回1;
});
如果你想这样做在MySQL中,只是换挡的日子正向这样你可以使用
ORDER BY(`day` + 1)7%
或者,如果它需要更复杂的不仅仅是移了一天,您可以使用CASE来提供特定的顺序(尽管这种情况下,只需做同样的事情):
ORDER BY
案件
WHEN`day` = 2 THEN 0
WHEN`day` = 3,那么1
WHEN`day` = 4,则2
WHEN`day` = 5 THEN 3
WHEN`day` = 6 THEN 4
WHEN`day` = 7 THEN 5
WHEN'day` = 1,则6
结束;
I have two array $days_order
and $mysql_result
, I want to sort $mysql_result
array using $days_order
array. I want to display MySQL result in days order ascending? Is there any way to do this or any other way so that I can pass $days_order
in MySQL query in OrderBy
section?
$days_order = Array([0] => 2[1] => 3[2] => 4[3] => 5 [4] => 6[5] => 7[6] => 1);
$mysql_result = Array (
[0] => Array
(
[hashtag] => a7e87329b5eab8578f4f1098a152d6f4
[title] => Flower
[day] => 3
)
[1] => Array
(
[hashtag] => b24ce0cd392a5b0b8dedc66c25213594
[title] => Free
[day] => 2
)
[2] => Array
(
[hashtag] => e7d31fc0602fb2ede144d18cdffd816b
[title] => Ready
[day] => 1
)
)
I want sorted array in $days_order
Output:
Array
(
[0] => Array
(
[hashtag] => b24ce0cd392a5b0b8dedc66c25213594
[title] => Free
[day] => 2
)
[1] => Array
(
[hashtag] => a7e87329b5eab8578f4f1098a152d6f4
[title] => Flower
[day] => 3
)
[2] => Array
(
[hashtag] => e7d31fc0602fb2ede144d18cdffd816b
[title] => Ready
[day] => 1
)
)
You can use
the custom order array in the comparison function of usort
like this:
usort($mysql_result, function ($a, $b) use ($days_order) {
// Then check the position of the 'day' value of each element
// against the position of that value in $days_order.
$a = array_search($a['day'], $days_order);
$b = array_search($b['day'], $days_order);
if ($a < $b) return -1;
if ($a == $b) return 0;
return 1;
});
If you want to do it in MySQL, for just shifting the days forward like this you could use
ORDER BY (`day` + 1) % 7
Or if it needs to be more complex than just shifting a day you can use CASE to provide a specific order (although this CASE just does the same thing):
ORDER BY
CASE
WHEN `day` = 2 THEN 0
WHEN `day` = 3 THEN 1
WHEN `day` = 4 THEN 2
WHEN `day` = 5 THEN 3
WHEN `day` = 6 THEN 4
WHEN `day` = 7 THEN 5
WHEN `day` = 1 THEN 6
END;
这篇关于排序多维数组由给定的指标 - PHP?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!