簡體   English   中英

PHP 如何根據日期排列數組鍵值

[英]PHP how to arrange array key values based on date

我想根據數組值日期(從 - 到)排列數組鍵值,例如以下是我的數組,我想從這個數組中安排預訂日期。

Array
(
    [0] => Array
        (
            [id] => 56
            [user_id] => 12
            [name] => A
            [email] => hhjhj@df.com
            [phone] => 4522111111
            [service_name] => a:1:{i:0;s:14:"Beard modeling";}
            [booking_date] => 2021-01-01
            [time] => 18:30:00
            [barbar_id] => 11
            [created_date] => 2021-01-01 12:11:35
        )

    [1] => Array
        (
            [id] => 57
            [user_id] => 12
            [name] => B
            [email] => hhjhj@df.com
            [phone] => 4522111111
            [service_name] => a:1:{i:0;s:14:"Beard modeling";}
            [booking_date] => 2021-01-09
            [time] => 18:30:00
            [barbar_id] => 11
            [created_date] => 2021-01-01 12:11:35
        )

    [2] => Array
        (
            [id] => 58
            [user_id] => 12
            [name] => C
            [email] => hhjhj@df.com
            [phone] => 4522111111
            [service_name] => a:1:{i:0;s:14:"Beard modeling";}
            [booking_date] => 2021-01-14
            [time] => 18:30:00
            [barbar_id] => 11
            [created_date] => 2021-01-01 12:11:35
        )

    [3] => Array
        (
            [id] => 61
            [user_id] => 12
            [name] => GGG
            [email] => d@fdfdf.com
            [phone] => 4522111111
            [service_name] => a:1:{i:0;s:14:"Beard modeling";}
            [booking_date] => 2021-01-17
            [time] => 18:30:00
            [barbar_id] => 11
            [created_date] => 2021-01-01 12:11:35
        )

    [4] => Array
        (
            [id] => 59
            [user_id] => 12
            [name] => k
            [email] => hhjhj@df.com
            [phone] => 4522111111
            [service_name] => a:1:{i:0;s:14:"Beard modeling";}
            [booking_date] => 2021-01-28
            [time] => 18:30:00
            [barbar_id] => 11
            [created_date] => 2021-01-01 12:11:35
        )

)

我想安排booking_date

booking_date :  2021-01-01 To 2021-01-09
booking_date :  2021-01-14 To 2021-01-17
booking_date :  2021-01-17 To 2021-01-28

我已經在代碼下面嘗試過,但它不被認為是 booking_date: 2021-01-28

foreach ($getUsers as $kt=> $value) {    
    if($kt % 2 ==0){
        echo "booking_date".$getUsers[$kt]['booking_date'].'</br>';  



        $from = $getUsers[$kt]['booking_date'];
    }else{
       echo "booking_date ELSE".$getUsers[$kt]['booking_date'].'</br>';  
      // echo "EEE".$sql.'</br>';  

      $to =$from.' To ' .$getUsers[$kt]['booking_date'];

     }
}

有人請幫助我,我必須在腳本中更改什么?

嘗試這樣的事情:

for($i=0;$i<=count($getUsers);$i+2) {  
    if(isset($getUsers[$i]))
        echo "booking_date: ".$getUsers[$i]['booking_date'].'-'.$getUsers[$i+1]['booking_date'].'</br>';  

    }
}

對於您想要 output 的原始問題:

booking_date :  2021-01-01 To 2021-01-09
booking_date :  2021-01-14 To 2021-01-17
booking_date :  2021-01-17 To 2021-01-28

我認為array_chunk會很方便,因為您將項目配對在一起以創建“從”和“到”。

解決方案的另一部分只是跟蹤倒數第二個booking_date ,因此我們可以將其用作最后一個元素的from

我還添加了處理只有 1 個元素的數組,因為我不太確定您的用例。

 <?php

    $userBookings = [
         0 => [ 'booking_date' => '2021-01-01' ],
         1 => [ 'booking_date' => '2021-01-09' ],
         2 => [ 'booking_date' => '2021-01-14' ],
         3 => [ 'booking_date' => '2021-01-17' ],
         4 => [ 'booking_date' => '2021-01-28' ]
    ];

    $userBookingsPairs = array_chunk($userBookings, 2);

    $fromDate = $toDate = $previousToDate = '';

    foreach ($userBookingsPairs as $userBookingsChunk) {
            $isPair = count($userBookingsChunk) === 2;

            if ($isPair) {
                    $from = reset($userBookingsChunk);
                    $to = end($userBookingsChunk);
                    $fromDate = $from['booking_date'];
                    $previousToDate = $toDate = $to['booking_date'];
            } elseif (!empty($previousToDate)) {
                    // Last element following pairs
                    $to = reset($userBookingsChunk);
                    $fromDate = $previousToDate;
                    $toDate = $to['booking_date'];
            } else {
                    // Single element only
                    $to = reset($userBookingsChunk);
                    $toDate = $to['booking_date'];
                    echo "booking_date: {$toDate}<br>";
                    break;
            }

            echo "booking_date: {$fromDate} To {$toDate}<br>";
    }

至於你的第二個問題

2021-01-01 To 2021-01-09, 2021-01-09 To 2021-01-14, 2021-01-14 To 2021-01-17 And 2021-01-17 To 2021-01-28

因此,基本而言,對於前 2 個元素,我們從元素 #1 和元素 #2 中獲取booking_date並將它們組合起來。

對於接下來的 2 個元素,我們將元素 #2 的booking_date與元素 #3 組合,然后將元素 #3 與元素 #4 組合。 依此類推,直到最后一個元素,我們將元素#n-1 與元素#n 組合在一起。

 <?php

      $userBookings = [
         0 => [ 'booking_date' => '2021-01-01' ],
         1 => [ 'booking_date' => '2021-01-09' ],
         2 => [ 'booking_date' => '2021-01-14' ],
         3 => [ 'booking_date' => '2021-01-17' ],
         4 => [ 'booking_date' => '2021-01-28' ]
      ];

      $output = '';

      $userBookingsPairs = array_chunk($userBookings, 2);

      $fromDate = $toDate = $previousFromDate = $previousToDate = '';

      foreach ($userBookingsPairs as $userBookingsChunk) {
           $isPair = count($userBookingsChunk) === 2;

           if ($isPair) {
                $from = reset($userBookingsChunk);
                $to = end($userBookingsChunk);
                $fromDate = $from['booking_date'];
                $toDate = $to['booking_date'];
                if (empty($previousFromDate)) {
                     // First iteration
                     $output = "$fromDate To $toDate";
                } else { // 'n'th iteration
                     // print date range using prior element
                     $output .= ", $previousToDate To $fromDate";

                     // print date range for this element
                     $output .= ", $fromDate To $toDate";
                }

                $previousFromDate = $fromDate;
                $previousToDate = $toDate;
           } elseif (!empty($previousToDate)) {
                // Last element following pairs
                $to = reset($userBookingsChunk);
                $output .= ", $previousToDate To {$to['booking_date']}";
           } else {
                // Single element only
                $to = reset($userBookingsChunk);
                $output = $to['booking_date'];
           }
      }

      echo $output;

使用 a for bucle,增量為 2。使用“index”創建區間 - “index+1”。

例如,您可以使用以下代碼:

        foreach ($array as $kt => $value) {

        if ($kt % 2 !== 0) {
            continue;
        }

        $to = null;
        if(isset($array[$kt + 1])) {
            $to = ' To ' .$array[$kt + 1]['booking_date'];
        }

        echo 'booking_date: ' . $value['booking_date'] . $to . '<br>';
    }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM