[英]Recursive infinite daily dynamic loop array php
我想每天循環顯示一個數字。 到達最后一個元素后,它需要再次到達第一個元素。 這需要每天進行。 我已經竭盡全力了,但是沒有解決。 函數需要按日期/小時/分鍾返回當前數字,例如。 這是我到目前為止嘗試過的。
<?php
function recursive_daily_deals($i = 1) {
$current_date = strtotime(date('d-m-Y h:i:s'));
$dbs_date_1 = strtotime('29-06-2017 8:20:16');
$current_hour = date('h');
var_dump($current_hour);
$products = [
451,
455,
453
];
if ($i < count($products)) {
return recursive_daily_deals($i+1);
}
}
?>
預期輸出
> First day - June 29 2017
> It will appear 451
> Second day - June 30 2017
> It will appear 455
> 3rd day - July 1st 2017
> It will appear 453
> 4th Day - July 2nd 2017
> It will appear 453
> And start over
首先,您需要知道從開始到現在已經多少天了。 為此,您只需要從實際時間戳中減去開始時間戳即可:
$dbs_date_1 = strtotime('29-06-2017 8:20:16');
$actualTimestamp = time();
$elapsedSec = $dbs_date_1 - $actualTimestamp;
// we need to get days from seconds
$elapsedDays = $elapsedSec / (3600*24);
$elapsedDays = floor($elapsedDays);
因此,自開始日期到現在有多少天了。 我們使用floor()而不是round(),因為如果腳本在半天后運行,它將返回+1天。
有了這個天數,我們可以通過將經過的天數除以數組中的項目數來獲得已經完成的周期數:
$nbItems = count($products);
$cycleCount = $elapsedDays / $nbItems;
$finishedCycles = floor($cycleCount);
我們通過對循環數進行下限來存儲完成的循環數。 然后,我們只需要從過去的天數中減去完成這些周期所需的天數,就可以得到索引的位置。
$completeDays = $finishedCycles * $nbItems;
$actualPosition = $elapsedDays - $completeDays;
return $products[$actualPosition];
雖然這是最初發布的代碼的簡化版本,但我認為它包含OP尋求的那種邏輯,如下所示:
<?php
$products = [
451,
455,
453
];
$modfactor = count($products);
$days = null;
$weekdays = ["Monday","Tuesday","Wednesday","Thursday","Friday","Saturday","Sunday"];
for ($i=0, $max = 7; $i < $max; $i++) {
$days[$i] = $i % $modfactor;
}
foreach ($weekdays as $dex => $wday) {
echo "$wday, ";
echo $products[ $days[$dex] ], "\n";
}
觀看演示
更新:請參見此處的演示,該演示利用array_map()並獲取當前產品ID。
盡管循環一直存在,但它不是無限的。 如果產品數量發生變化,那么modfactor也將發生變化。 一周中的每一天保持不變。 使代碼起作用的原因是利用了模運算。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.