Harry Beasant
Harry Beasant

Reputation: 1014

Adding missing dates for 1 week back from now

I am trying to add the missing dates to this array for 1 week back from now.

This is an example array I have;

Array
(
    [0] => Array
        (
            [date] => 2013-11-25
            [members] => 2
        )

    [1] => Array
        (
            [date] => 2013-11-27
            [members] => 1
        )

)

This could have any dates in. I tried things like this, but I can see logically It doesn't work, but I cannot figure out a way.

$date_range = array();
            $temp = array();
           for ($i=0; $i<7; $i++)
            {
              $date = date("Y-m-d", strtotime($i." days ago"));

              foreach($new_members as $members) {  

                if(!in_array($date, $members)) {

                $temp['date'] = $date;

                $temp['members'] = 0;

                $new_members[] = array_merge($temp);

              }

              }


            }

Upvotes: 0

Views: 74

Answers (2)

Matt
Matt

Reputation: 343

Solution provided by Dainis doesn't work for me, it's messing up the members and date.

Here is my solution:

<?php

$new_members = array ( array("date"=>"2013-11-25", "members" => 2), array("date"=>"2013-11-27", "members" => 2));
for ($i=0; $i<7; $i++)
{
    $date = date("Y-m-d", strtotime($i." days ago"));
    $found = false;
    foreach($new_members as $members) {
        if(array_search($date, $members) !== false) {
            $found = true;
        }
    }
    if(!$found) {
        $new_members[] = array ("date" => $date, "members" => 0);
    }
}

foreach($new_members as $nm) {
    var_dump($nm);
}

?>

Upvotes: 1

Peon
Peon

Reputation: 8020

Instead of:

$temp['date'] = $date;
$temp['members'] = 0;
$new_members[] = array_merge($temp);

just do it like this:

$new_members[$i]['date'] = $date;
if ( !$new_members[$i]['members'] ) $new_members[$i]['members'] = 0;

After that you can sort it after ['date'] value and get a nice looking array.

Upvotes: 0

Related Questions