F__M
F__M

Reputation: 1598

Loop into a query and an array in PHP

I have a table containing some date for dates:

___BillableDatas:

|----------|------------|---------------|
|BIL_Id    | BIL_Date   | BIL_BookingID |
|----------|------------|---------------|
| 1        | 2017-01-01 | 10            |
| 2        | 2017-01-02 | 10            |
| 3        | 2017-01-06 | 11            |
| 4        | 2017-01-07 | 11            |
| 5        | 2017-01-08 | 11            |
| 6        | 2017-01-12 | 14            |
|----------|------------|---------------|

And I have this array giving me all the dates between two dates:

$dates = getDatesFromRange('2017-01-01', '2017-01-15');

Array ( [0] => 2017-01-01 [1] => 2017-01-02 [2] => 2017-01-03 [3] => 2017-01-04 [4] => 2017-01-05 [5] => 2017-01-06 [6] => 2017-01-07 [7] => 2017-01-08 [8] => 2017-01-09 [9] => 2017-01-10 [10] => 2017-01-11 [11] => 2017-01-12 [12] => 2017-01-13 [13] => 2017-01-14 )

I want to be able to loop into this table to get all the days between a period (from 2017-01-01 to 2017-01-15 for example).

For example, the desired output should be the following Json or array:

"datas": {
    "2017-01-01": {
        "bookingId": "10"
    },
    "2017-01-02": {
        "bookingId": "10"
    },
    "2017-01-03": {
        "bookingId": "0"
    },
    "2017-01-04": {
        "bookingId": "0"
    },
    "2017-01-05": {
        "bookingId": "0"
    },
    "2017-01-06": {
        "bookingId": "11"
    },
    "2017-01-07": {
        "bookingId": "11"
    },
    "2017-01-08": {
        "bookingId": "11"
    },
    "2017-01-09": {
        "bookingId": "0"
    },
    "2017-01-10": {
        "bookingId": "0"
    },
    "2017-01-11": {
        "bookingId": "0"
    },
    "2017-01-12": {
        "bookingId": "14"
    },
    "2017-01-13": {
        "bookingId": "0"
    },
    "2017-01-14": {
        "bookingId": "0"
    },
    "2017-01-15": {
        "bookingId": "0"
    }
}

Upvotes: 0

Views: 53

Answers (2)

Meera Tank
Meera Tank

Reputation: 719

If i am not wrong you wants result including all the date range between two dates regardless it's present in DB table or not

you can loop and compare available date and create your desire array or json.

$new_array = array();
 foreach ($dates as $date){  // date range from "2017-01-01" to "2017-01-15"  
     $avalilable = 0;
        foreach ($bills as $bill){ // records From __BillableDatas table 
            if($bill->BIL_Date == $date)
            {
                $avalilable = 1;
                $new_array[$date] = array("bookingId" =>  $bill->BIL_BookingID);
                break;  
            }   
    } 
    if(!$avalilable)
        $new_array[$date] = array("bookingId" =>  0);
 }
   echo  json_encode($new_array);

Hope this will help

Upvotes: 1

Pramod Patil
Pramod Patil

Reputation: 2763

If I understood your question correctly, then below is the way to calculate number of days between 2 dates. No need for loop.Comment on this if you think otherwise

<?php
$from = strtotime('2017-01-01'); 
$to = strtotime("2017-01-15");
$datediff = $to - $from;

echo floor($datediff / (60 * 60 * 24));

?>

Upvotes: 0

Related Questions