亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

按最近日期對對象數組進行排序

按最近日期對對象數組進行排序

PHP
萬千封印 2022-10-14 10:25:31
我在 PHP 中有一個帶有一個鍵的對象數組 - 日期。我有未來的日期和過去的日期。我需要按最新日期對它們進行排序。這是我的數組var_dump()array (size=15)  0 =>     object(stdClass)[7852]      public 'date' => string '20200417' (length=8)  1 =>     object(stdClass)[7846]      public 'date' => string '20200302' (length=8)  2 =>     object(stdClass)[7856]      public 'date' => string '20200224' (length=8)  3 =>     object(stdClass)[7853]      public 'date' => string '20200220' (length=8)  4 =>     object(stdClass)[7847]      public 'date' => string '20200213' (length=8)  5 =>     object(stdClass)[7845]      public 'date' => string '20200211' (length=8)  ...有沒有辦法對此進行排序,以便第一個對象是 20200302,然后是 20200224,依此類推。但未來的日期將在數組的最后。我試過這個:usort($arr, function($a, $b) {    return strtotime($b->date) - strtotime($a->date);});但是這段代碼并不關心當前日期,它只是將它們排序為日期。我還嘗試了一種解決方法,從計算間隔date('Ymd') -  $arr->date并將其設置為對象的一部分,但strcmp()在usrot函數中給出幾乎相同的結果,因為未來日期將給出負數,并且按升序排列,負數將在正數之前。意思是,最未來的日期將是第一個,而不是最新的日期。任何幫助深表感謝。
查看完整描述

2 回答

?
慕桂英3389331

TA貢獻2036條經驗 獲得超8個贊

你需要做的是計算出每個日期離今天有多遠,并用它來對項目進行排序,可能有一種更優雅的方式,但這(我認為)有效。基本上用于abs()確保所有差異都是 +ve 并從今天開始每個日期......


usort($arr, function($a, $b) {

    return (abs(strtotime('today') - strtotime($a->date))

        - (abs(strtotime('today') - strtotime($b->date))));

});


查看完整回答
反對 回復 2022-10-14
?
慕蓋茨4494581

TA貢獻1850條經驗 獲得超11個贊

奈杰爾的回答幫了大忙,但產生的結果參差不齊,有時日期會到處都是,我不知道為什么。所以,我想出了一個解決方法,也許它會對互聯網上的人有所幫助。


我已經向一個對象添加了一個鍵/值 - interval,我以下列方式計算的這個鍵的值。


$interval_raw = date("Ymd") - get_field('date_nachalo') + 1;

    if($interval_raw < 0) {

        $interval_raw += 10000;

    }

所以,如果我得到一個負數,即任何未來的日期,我會提前 30 年加上 10000,我想這有點矯枉過正,因為沒有正常的人類將事件安排在那么遠的未來。此外,添加+ 1以便下一個即將到來的日期將是第一個。如果我刪除它,那么第一個日期將是過去的日期。基本上,如果今天是 3 月 10 日,最后一個事件是 3 月 1 日,下一個事件事件是 3 月 11 日,那么沒有第+ 1一個事件日期將是 3 月 1 日而不是 3 月 11 日。


如果有人知道更優雅的方法,請讓全世界知道。


查看完整回答
反對 回復 2022-10-14
  • 2 回答
  • 0 關注
  • 90 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號