Reputation: 1014
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
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
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