Friday, 15 January 2010

php - How to assign values from one array to another for n times -



php - How to assign values from one array to another for n times -

i trying create schedule of uses specific item on day.

i have 2 arrays. one dates & another names , how many days can utilize item.

i have managed create dates array using this.

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 $day) { $datekey = $day->format("d-m-y"); $basearray[$datekey] = $value; } homecoming $basearray; } $dates_array = datearray('01-01-2014', '30-09-2014',true); print_r($dates_array );

which gives me dates

array ( [01-01-2014] => 1 [02-01-2014] => 1 [03-01-2014] => 1 [04-01-2014] => 1 [05-01-2014] => 1 [06-01-2014] => 1 [07-01-2014] => 1 [08-01-2014] => 1 [09-01-2014] => 1 , on. )

i have array of names having name key , days value , can utilize item this.

$names_array = array("name1" => "4", "name2" => "3", "name3" => "1");

now assign names dates depending on how many days person can utilize item. this. i need final output array this

array ( [01-01-2014] => name1 [02-01-2014] => name1 [03-01-2014] => name1 [04-01-2014] => name1 [05-01-2014] => name2 [06-01-2014] => name2 [07-01-2014] => name2 [08-01-2014] => name3 [09-01-2014] => name1 , on. notice name1 comes 1 time again )

so trying output above failing @ while loop within foreach. far have tried this.

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 $day) { $datekey = $day->format("d-m-y"); $basearray[$datekey] = $value; } homecoming $basearray; } $dates_array = datearray('01-01-2014', '30-09-2014',true); $names_array = array("name1" => "4", "name2" => "3", "name3" => "1"); print_r($dates_array ); $new_dates = array(); foreach($dates_array $dates => $key){ //echo $dates; foreach ($names_array $name => $days){ while($days <= 1){ $new_dates[$dates] = $name ; $days = $days - 1; } } } print_r($new_dates);

but final array empty.

so how can solve ?

you can utilize multipleiterator whereby sec array (names) loops around when needed:

$names_array = array(); // unwind array values foreach (array("name1" => "4", "name2" => "3", "name3" => "1") $value => $freq) { ($i = 0; $i < $freq; ++$i) { $names_array[] = $value; } } // attach both arrays $m = new multipleiterator; $m->attachiterator(new arrayiterator(array_keys($dates_array))); $m->attachiterator(new infiniteiterator(new arrayiterator($names_array))); // build final array $result = array(); foreach ($m $value) { $result[$value[0]] = $value[1]; }

php arrays datetime

No comments:

Post a Comment