首页 > 解决方案 > 如何按值比较对数值数组进行排序并更改数组索引的位置

问题描述

我需要在某些条件下对数组进行排序。

Array
(
    [0] => Array
        (
            [entity_id] => 10
            [product_id] => 424
            [city] => 18
            [sort_order] => 10
            [deal_type_id] => dow
            [deal_from_date] => 2010-12-18
            [deal_to_date] => 2026-02-19
        )

    [1] => Array
        (
            [entity_id] => 11
            [product_id] => 423
            [city] => 18
            [sort_order] => 11
            [deal_type_id] => dow
            [deal_from_date] => 2010-12-18
            [deal_to_date] => 2027-02-19
        )

    [2] => Array
        (
            [entity_id] => 12
            [product_id] => 422
            [city] => 18
            [sort_order] => 12
            [deal_type_id] => dow
            [deal_from_date] => 2011-12-18
            [deal_to_date] => 2030-01-19
        )

    [3] => Array
        (
            [entity_id] => 13
            [product_id] => 420
            [city] => 18
            [sort_order] => 13
            [deal_type_id] => dow
            [deal_from_date] => 2011-12-18
            [deal_to_date] => 2030-01-19
        )

    [4] => Array
        (
            [entity_id] => 1
            [product_id] => 463
            [city] => 18
            [sort_order] => 1
            [deal_type_id] => dod
            [deal_from_date] => 2013-12-18
            [deal_to_date] => 2025-01-19
        )

    [5] => Array
        (
            [entity_id] => 2
            [product_id] => 452
            [city] => 18
            [sort_order] => 2
            [deal_type_id] => dom
            [deal_from_date] => 2013-12-18
            [deal_to_date] => 2026-01-19
        )

    [6] => Array
        (
            [entity_id] => 3
            [product_id] => 448
            [city] => 18
            [sort_order] => 3
            [deal_type_id] => dod
            [deal_from_date] => 2013-12-18
            [deal_to_date] => 2027-01-19
        )

    [7] => Array
        (
            [entity_id] => 4
            [product_id] => 441
            [city] => 18
            [sort_order] => 4
            [deal_type_id] => dod
            [deal_from_date] => 2013-12-18
            [deal_to_date] => 2024-01-19
        )

    [8] => Array
        (
            [entity_id] => 5
            [product_id] => 440
            [city] => 18
            [sort_order] => 5
            [deal_type_id] => dod
            [deal_from_date] => 2013-12-18
            [deal_to_date] => 2027-01-19
        )

    [9] => Array
        (
            [entity_id] => 6
            [product_id] => 439
            [city] => 18
            [sort_order] => 6
            [deal_type_id] => dom
            [deal_from_date] => 2013-12-18
            [deal_to_date] => 2028-01-19
        )

    [10] => Array
        (
            [entity_id] => 7
            [product_id] => 433
            [city] => 18
            [sort_order] => 7
            [deal_type_id] => dom
            [deal_from_date] => 2013-12-18
            [deal_to_date] => 2013-01-19
        )

    [11] => Array
        (
            [entity_id] => 8
            [product_id] => 427
            [city] => 18
            [sort_order] => 8
            [deal_type_id] => dod
            [deal_from_date] => 2013-12-18
            [deal_to_date] => 2022-01-19
        )

    [12] => Array
        (
            [entity_id] => 9
            [product_id] => 425
            [city] => 18
            [sort_order] => 9
            [deal_type_id] => dom
            [deal_from_date] => 2013-12-18
            [deal_to_date] => 2025-02-19
        )

)

我需要比较 deal_from_date 从上一个键到下一个键。如果两者相同,我需要检查 deal_to_date 中的更大值。如果我发现两个 deal_to_date 值是不同的,那么首先按照更大的排序。

我试过。

for($i=0;$i<count($result);$i++)
{
    if(array_key_exists($i+1, $result))
    {
        if(strtotime($result[$i]['deal_from_date']) == strtotime($result[$i+1]['deal_from_date']))
        {
            echo $i;
            if(strtotime($result[$i]['deal_to_date']) < strtotime($result[$i+1]['deal_to_date']))
            { 
                $firstArray = $result[$i];
                unset($result[$i]);
                $secondArray = $result[$i+1];
                unset($result[$i]);
                $result[$i] = $secondArray;
                $result[$i+1] = $firstArray;
            }
        }
    }
}

我需要这个输出。

Array
(

    [0] => Array
    (
        [entity_id] => 11
        [product_id] => 423
        [city] => 18
        [sort_order] => 11
        [deal_type_id] => dow
        [deal_from_date] => 2010-12-18
        [deal_to_date] => 2027-02-19
    )
    [1] => Array
        (
            [entity_id] => 10
            [product_id] => 424
            [city] => 18
            [sort_order] => 10
            [deal_type_id] => dow
            [deal_from_date] => 2010-12-18
            [deal_to_date] => 2026-02-19
        )

   [1] => Array
        (
            [entity_id] => 12
            [product_id] => 422
            [city] => 18
            [sort_order] => 12
            [deal_type_id] => dow
            [deal_from_date] => 2011-12-18
            [deal_to_date] => 2030-01-19
        )

    [2] => Array
        (
            [entity_id] => 13
            [product_id] => 420
            [city] => 18
            [sort_order] => 13
            [deal_type_id] => dow
            [deal_from_date] => 2011-12-18
            [deal_to_date] => 2030-01-19
        )

    [3] => Array
        (
            [entity_id] => 2
            [product_id] => 452
            [city] => 18
            [sort_order] => 2
            [deal_type_id] => dom
            [deal_from_date] => 2013-12-18
            [deal_to_date] => 2026-01-19
        )
    [4] => Array
        (
            [entity_id] => 1
            [product_id] => 463
            [city] => 18
            [sort_order] => 1
            [deal_type_id] => dod
            [deal_from_date] => 2013-12-18
            [deal_to_date] => 2025-01-19
        )



    [5] => Array
        (
            [entity_id] => 3
            [product_id] => 448
            [city] => 18
            [sort_order] => 3
            [deal_type_id] => dod
            [deal_from_date] => 2013-12-18
            [deal_to_date] => 2027-01-19
        )

       [6] => Array
        (
            [entity_id] => 6
            [product_id] => 439
            [city] => 18
            [sort_order] => 6
            [deal_type_id] => dom
            [deal_from_date] => 2013-12-18
            [deal_to_date] => 2028-01-19
        )
    [7] => Array
        (
            [entity_id] => 5
            [product_id] => 440
            [city] => 18
            [sort_order] => 5
            [deal_type_id] => dod
            [deal_from_date] => 2013-12-18
            [deal_to_date] => 2027-01-19
        )

[8] => Array
        (
            [entity_id] => 9
            [product_id] => 425
            [city] => 18
            [sort_order] => 9
            [deal_type_id] => dom
            [deal_from_date] => 2013-12-18
            [deal_to_date] => 2025-02-19
        )
    [9] => Array
        (
            [entity_id] => 4
            [product_id] => 441
            [city] => 18
            [sort_order] => 4
            [deal_type_id] => dod
            [deal_from_date] => 2013-12-18
            [deal_to_date] => 2024-01-19
        )


  [10] => Array
        (
            [entity_id] => 8
            [product_id] => 427
            [city] => 18
            [sort_order] => 8
            [deal_type_id] => dod
            [deal_from_date] => 2013-12-18
            [deal_to_date] => 2022-01-19
        )

    [11] => Array
        (
            [entity_id] => 7
            [product_id] => 433
            [city] => 18
            [sort_order] => 7
            [deal_type_id] => dom
            [deal_from_date] => 2013-12-18
            [deal_to_date] => 2013-01-19
        )





)

如果从日期开始的多笔交易是同一日期,我需要对数组进行排序。然后根据 deal_to_date desc 排序。仅适用于同一组。

标签: phparrayssorting

解决方案


只需使用usort()这样的功能:

function sorter($a,$b){return $a["deal_from_date"]<=>$b["deal_from_date"]}
usort($array,sorter)

我希望这会对你有所帮助!


推荐阅读