簡體   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