0

I am writing a PHP script where the inputs are:

From date
To date

I then want to take that date range and create an array of some sort that has:

Array(date,x)

As I add each date to the array, I will calculate the value that goes with it.

With .NET I would (off the top of my head) use a dictionary where the date was the key and x is the value.

The main task is getting that date range, then splitting that range into an array or dictionary of some sort (What would be ideal in php)

As i'm adding it to the array i'll run off some other code i've already wrote that calculate the value to go with that date

At the end of it all when it's added in there, i'll need to iterate through the array or list and add all the x values together.

Dan Harris
  • 1,336
  • 1
  • 21
  • 44

3 Answers3

7

(Untested)

function dateArray($from, $to, $value = NULL) {
    $begin = new DateTime($from);
    $end = new DateTime($to);
    $interval = DateInterval::createFromDateString('1 day');
    $days = new DatePeriod($begin, $interval, $end);

    $baseArray = array();
    foreach ($days as $day) {
        $dateKey = $day->format("Y-m-d");
        $baseArray[$dateKey] = $value;
    }

    return $baseArray;
}

$datesArray = dateArray('2011-01-01', '2011-03-31',true);
Mark Baker
  • 209,507
  • 32
  • 346
  • 385
1

If I understand you correctly, you could use an associative array for that:

array(
  '00-00-00' => $value,
  '01-01-01' => $value,
  // etc...
);

Or you can create it like this:

$myArray = array();
$myArray['00-00-00'] = $value;
$myArray['01-01-01'] = $value;

You could populate them by running a loop...

xil3
  • 16,305
  • 8
  • 63
  • 97
1

you can try this

function makeDateRange($from,$to,$pattern='m-d-y')
{
    $day = date( $pattern , $from );
    $to = date( $pattern , $to );
    $parseDate = date_parse($from);
    while( $day <= $to ) {
        $day = mktime(0,0,0,$parseDate["month"],$parseDate["day"]+1,$parseDate["year"]);
        $dateArray[] = date($pattern , $day);
        }
    return $dateArray;
}

// here make array $keys = makeDateRange("12-01-11","12-02-11");

//here make above array as key in $a array $a = array_fill_keys($keys, 'none'); print_r($a);

AmirModiri
  • 755
  • 1
  • 5
  • 13
  • This almost works but only prints out the first date: Array ( [01-12-12] => none ) - If i'm reading it correctly it should load all dates between 12-01-11 and 12-02-11?? – Dan Harris Feb 04 '11 at 13:17