Php 按日期排序

Php 按日期排序,php,arrays,json,sorting,date,Php,Arrays,Json,Sorting,Date,首先,我是这个json的新手,我已经搜索了解决方案,但似乎没有找到诀窍 其中数据如下所示: Array ( [0] => Array ( [debtor_name] => Name 1 [debtor_number] => 0001 [statement_date] => 7/31/17 [statement_period] => 07/01/20

首先,我是这个json的新手,我已经搜索了解决方案,但似乎没有找到诀窍

其中数据如下所示:

Array
(
    [0] => Array
        (
            [debtor_name] => Name 1
            [debtor_number] => 0001
            [statement_date] => 7/31/17
            [statement_period] => 07/01/2017 - 07/31/2017
            [due_date] => 8/31/17
            [statement_number] => 2017-07-0001
            [courier] => Handcarry
            [outstanding_bal] => 3,647.53
            [bal_br_fwd] => 3,647.16
            [age_cur] => 3,647.53
            [age_30] => 0
            [age_60] => 0
            [age_90] => 0
            [age_120] => 0
            [password] => 11291934
            [email] => rolex@bngtransmedia.com
            [counter] => 1
            [transList] => Array
                (
                    [0] => Array
                        (
                            [lineOrder] => 0
                            [date] => 7/1/17
                            [dateNum] => 1498838400000
                            [ref] => 0000484236
                            [amt] => 7231.16
                            [desc] => MD-MONTHLY DUES
                            [debit] => 3584
                            [credit] => 0
                        )

                    [1] => Array
                        (
                            [lineOrder] => 1
                            [date] => 7/15/17
                            [dateNum] => 1500048000000
                            [ref] => 0000165008
                            [amt] => 3684
                            [desc] => CM-METROBANK
                            [debit] => 0
                            [credit] => 3647.16
                        )

                    [2] => Array
                        (
                            [lineOrder] => 2
                            [date] => 7/15/17
                            [dateNum] => 1500048000000
                            [ref] => 0000165008
                            [amt] => 3647.53
                            [desc] => 1% Discount
                            [debit] => 0
                            [credit] => 36.47
                        )

                    [3] => Array
                        (
                            [lineOrder] => 3
                            [date] => 7/1/17
                            [dateNum] => 1498838400000
                            [ref] => 0000484237
                            [amt] => 7331.16
                            [desc] => MD-VALLEY SENIORS FEE
                            [debit] => 100
                            [credit] => 0
                        )

                )

        )

    [1] => Array
        (
            [debtor_name] => Name 2
            [debtor_number] => 2665
            [statement_date] => 7/31/17
            [statement_period] => 07/01/2017 - 07/31/2017
            [due_date] => 8/31/17
            [statement_number] => 2017-07-2665
            [courier] => Sure Mail
            [outstanding_bal] => 18,194.93
            [bal_br_fwd] => 17,897.63
            [age_cur] => 5,193.00
            [age_30] => 6,196.01
            [age_60] => 4,984.71
            [age_90] => 1,821.21
            [age_120] => 0
            [password] => 05291962
            [email] => r.estemonio@gmail.com
            [counter] => 5372
            [transList] => Array
                (
                    [0] => Array
                        (
                            [lineOrder] => 4
                            [date] => 7/1/17
                            [dateNum] => 1498838400000
                            [ref] => 0000479082
                            [amt] => 18082.63
                            [desc] => F&B CONCESSIONAIRE-F&B 015904 JJ
                            [debit] => 185
                            [credit] => 0
                        )

                    [1] => Array
                        (
                            [lineOrder] => 5
                            [date] => 7/1/17
                            [dateNum] => 1498838400000
                            [ref] => 0000485742
                            [amt] => 21666.63
                            [desc] => MD-MONTHLY DUES
                            [debit] => 3584
                            [credit] => 0
                        )

                    [2] => Array
                        (
                            [lineOrder] => 6
                            [date] => 7/1/17
                            [dateNum] => 1498838400000
                            [ref] => 0000485743
                            [amt] => 21890.63
                            [desc] => MD-LOCKER RENTAL
                            [debit] => 224
                            [credit] => 0
                        )

                    [3] => Array
                        (
                            [lineOrder] => 7
                            [date] => 7/1/17
                            [dateNum] => 1498838400000
                            [ref] => 0000481000
                            [amt] => 21920.63
                            [desc] => F&B CONCESSIONAIRE-F&B 026492 ANIX
                            [debit] => 30
                            [credit] => 0
                        )

                    [4] => Array
                        (
                            [lineOrder] => 8
                            [date] => 7/31/17
                            [dateNum] => 1501430400000
                            [ref] => PF00072305
                            [amt] => 18194.93
                            [desc] => PATRONAGE FEE
                            [debit] => 0
                            [credit] => 448
                        )

                    [5] => Array
                        (
                            [lineOrder] => 9
                            [date] => 7/6/17
                            [dateNum] => 1499270400000
                            [ref] => 0000481002
                            [amt] => 22010.63
                            [desc] => F&B CONCESSIONAIRE-F&B 027375 ANIX
                            [debit] => 15
                            [credit] => 0
                        )

                    [6] => Array
                        (
                            [lineOrder] => 10
                            [date] => 7/8/17
                            [dateNum] => 1499443200000
                            [ref] => 0000479083
                            [amt] => 22268.63
                            [desc] => F&B CONCESSIONAIRE-F&B 016332 JJ
                            [debit] => 258
                            [credit] => 0
                        )

                    [7] => Array
                        (
                            [lineOrder] => 11
                            [date] => 7/8/17
                            [dateNum] => 1499443200000
                            [ref] => 0000164358
                            [amt] => 17372.93
                            [desc] => CM-METROBANK
                            [debit] => 0
                            [credit] => 4895.7
                        )

                    [8] => Array
                        (
                            [lineOrder] => 12
                            [date] => 7/15/17
                            [dateNum] => 1500048000000
                            [ref] => 0000481003
                            [amt] => 17422.93
                            [desc] => F&B CONCESSIONAIRE-F&B 028985 ANIX
                            [debit] => 50
                            [credit] => 0
                        )

                    [9] => Array
                        (
                            [lineOrder] => 13
                            [date] => 7/15/17
                            [dateNum] => 1500048000000
                            [ref] => 0000479084
                            [amt] => 17735.93
                            [desc] => F&B CONCESSIONAIRE-F&B 016716 JJ
                            [debit] => 313
                            [credit] => 0
                        )

                    [10] => Array
                        (
                            [lineOrder] => 14
                            [date] => 7/22/17
                            [dateNum] => 1500652800000
                            [ref] => 0000478834
                            [amt] => 18289.93
                            [desc] => F&B CONCESSIONAIRE-08528DR
                            [debit] => 554
                            [credit] => 0
                        )

                    [11] => Array
                        (
                            [lineOrder] => 15
                            [date] => 7/29/17
                            [dateNum] => 1501257600000
                            [ref] => 0000479085
                            [amt] => 18642.93
                            [desc] => F&B CONCESSIONAIRE-F&B 017434 JJ
                            [debit] => 353
                            [credit] => 0
                        )

                    [12] => Array
                        (
                            [lineOrder] => 16
                            [date] => 7/1/17
                            [dateNum] => 1498838400000
                            [ref] => 0000481001
                            [amt] => 21995.63
                            [desc] => F&B CONCESSIONAIRE-F&B 026713 ANIX
                            [debit] => 75
                            [credit] => 0
                        )

                )

        )

)
所以我得到的数据是这样的

$json = json_decode($_POST["list"], true);
我尝试了这一行代码,但似乎不起作用:

function sort_by_date($a, $b) {
    $a = strtotime($a['date']);
    $b = strtotime($b['date']);
   return ($a < $b) ? -1 : 1;
}
usort($json, 'sort_by_date');
函数按日期排序($a,$b){
$a=strottime($a['date']);
$b=标准时间($b['date']);
回报率($a<$b)?-1:1;
}
usort($json,“按日期排序”);

我试图在transList数组中按日期对这个JSON数组进行排序,但我真的不知道应该如何在数组中调用这个变量,任何正确方向的提示都非常感谢

这将对每个transList中的数组进行排序:

foreach( $json as $k => $v )
{
    usort( $v['transList'], function( $a, $b ){
        $d1 = new DateTime( $a['date'] );
        $d2 = new DateTime( $b['date'] );
        if( $d1 == $d2 ){
            return 0;
        }
        return ($d1 < $d2) ? -1 : 1;
    });

    // For testing purposes, the array is print to screen to show sorting worked as required
    echo '<pre>';
    print_r( $v['transList'] );
    echo '</pre>';
}
如果日期相等,请回答有关按金额进一步排序的问题:

foreach($json作为$k=>$v)
{
usort($v['transList'],函数($a,$b){
$d1=新的日期时间($a['date']);
$d2=新的日期时间($b['date']);
如果($d1=$d2){
如果($a['amt']=$b['amt']){
返回0;
}
回报($a['amt']<$b['amt'])?-1:1;
}
回报($d1<$d2)?-1:1;
});
//出于测试目的,将数组打印到屏幕上,以显示按要求进行的排序
回声';
印刷品($v['transList']);
回声';
}

usort($json[0…n]['transList','sort\u by\u date')
这是什么$json[0…n]?您需要循环遍历所有
$json
项,并对每个项的
transList
数组进行排序<代码>usort($json[0]['transList'],'sort_by_date')
usort($json[1]['transList'],'sort_by_date')
usort($json[2]['transList'],'sort_by_date')
…Do
print\r($json[0]['transList'])并用结果更新您的问题。好的,我尝试这个usort($json[1]['transList']),它似乎实现了我将如何自动更改这个$json[0…n]的技巧通过循环?当数据具有相同的日期时,它交换位置。是否可以添加按日期和金额排序的条件?或者可能是按日期和id排序?请参阅修改后的答案,现在有一个按日期进一步排序的示例。完美。非常感谢您的帮助。
$json = [
    [
        'transList' => [
            [
                'id'   => 'a',
                'date' => '7/15/17'
            ],
            [
                'id'   => 'b',
                'date' => '2/15/17'
            ],
            [
                'id'   => 'c',
                'date' => '7/15/16'
            ],
            [
                'id'   => 'd',
                'date' => '4/15/12'
            ],
            [
                'id'   => 'e',
                'date' => '3/15/16'
            ]
        ]
    ],
    [
        'transList' => [
            [
                'id'   => 'd',
                'date' => '7/15/17'
            ],
            [
                'id'   => 'b',
                'date' => '2/15/17'
            ],
            [
                'id'   => 'g',
                'date' => '7/15/16'
            ],
            [
                'id'   => 'a',
                'date' => '4/15/12'
            ],
            [
                'id'   => 'x',
                'date' => '3/15/16'
            ]
        ]
    ]
];
foreach( $json as $k => $v )
{
    usort( $v['transList'], function( $a, $b ){
        $d1 = new DateTime( $a['date'] );
        $d2 = new DateTime( $b['date'] );
        if( $d1 == $d2 ){
            if( $a['amt'] == $b['amt'] ){
                return 0;
            }
            return ($a['amt'] < $b['amt']) ? -1 : 1;
        }
        return ($d1 < $d2) ? -1 : 1;
    });

    // For testing purposes, the array is print to screen to show sorting worked as required
    echo '<pre>';
    print_r( $v['transList'] );
    echo '</pre>';
}