繁体   English   中英

如何将一个数组中的值分配给另一个数组n次

[英]How to assign values from one array to another for n times

我正在尝试创建谁在哪一天使用特定物品的时间表。

我有2个数组。 一个带有日期另一个带有名称,以及他们可以使用多少天。

我设法使用此创建日期数组。

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("d-m-Y");
        $baseArray[$dateKey] = $value;
    }

    return $baseArray;
}

$dates_array = dateArray('01-01-2014', '30-09-2014',true);

print_r($dates_array );

这给我日期

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
and so on.
)

我还有另一个名称数组,名称作为键天作为值 ,他们可以使用这样的项目。

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

现在,我想根据该人可以使用多少天为该日期指定名称。 像这样。 我需要我的最终输出数组是这样的

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
and so on. notice name1 comes again 
)

所以我试图获得如上所述的输出,但是我在foreach中的while循环中失败了。 到目前为止,我已经尝试过了。

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("d-m-Y");
        $baseArray[$dateKey] = $value;
    }

    return $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 as $dates => $key){
//echo $dates;
    foreach ($names_array as $name => $days){

        while($days <= 1){
        $new_dates[$dates] = $name ;
        $days = $days - 1;
        }
    }
}

print_r($new_dates);

但是我的最终数组为空。

那么我该如何解决呢?

您可以使用MultipleIterator ,从而在需要时第二个数组(名称)循环:

$names_array = array();

// unwind the array values
foreach (array("name1" => "4", "name2" => "3", "name3" => "1") as $value => $freq) {
    for ($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 as $value) {
    $result[$value[0]] = $value[1];
}

它可能应该像这样...

while($days <= 1){
    $new_dates[$dates] = $name ;
    $names_array[$name] = $days - 1;
}

嗨,你可以试试这个

$dates_array = array_keys(dateArray('01-01-2014', '30-09-2014',true));
$names_array = array("name1" => "4", "name2" => "3", "name3" => "1");
$new_dates = array();

$daysindex = 0;
while($daysindex < count($dates_array)){
    foreach ($names_array as $name => $day){
        for($x = 0; $x<$day; $x++){
            if(isset($dates_array[$daysindex])){
            $new_dates[$dates_array[$daysindex]] = $name ;
        $daysindex++;
            }
        }
    }
}
print_r($new_dates);
$dates = dateArray('01-01-2014', '30-09-2014',true);  
$names = array('name1' => 4,'name2' => 3,'name3' => 1);

$count = current($names);
$name = key($names);

foreach($dates as &$value) {   
    $value = $name;

    //if we've displayed a name $count times, move to the next name
    if(--$count == 0) {
        //if we're at the end of $names, wrap around
        if(false === next($names)) {
            reset($names);
        }

        $count = current($names);
        $name = key($names);        
    }
}

print_r($dates);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM