Create an array/collection/list of (Date,Value) in

2020-05-06 12:27发布

问题:

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.

回答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);



回答2:

(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);


回答3:

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...