排序多维数组由给定的指标 - PHP? [英] Sort Multi-dimensional Array by given indexes - PHP?

查看:111
本文介绍了排序多维数组由给定的指标 - 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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆