You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PHP数组问题:从日期数组提取当日及后4天到新数组失败

解决5天天气预报日期数组重复的问题

嘿,我看你在开发第一个Web应用,用OpenWeatherMap API做5天预报,结果碰到日期数组全是当天重复值的问题了。咱们来揪出问题根源,然后基于你的原有脚本修改解决它!

问题出在哪?

你原代码的核心问题是:当找到当天的星期条目后,while循环只是一个劲儿把当前的$dv(也就是当天的星期名)往$five_days里塞,完全没往后遍历$day_name数组——指针一直停在当天的位置,自然每次push的都是同一个值。

修改后的代码(基于你的原有逻辑调整)

$day_name = array( 1=>'Monday', 2=>'Tuesday', 3=>'Wednesday', 4=>'Thursday', 5=>'Friday', 6=>'Saturday', 7=>'Sunday');
$day_start = date('N');
$five_days = array();

// 先把数组指针定位到当天的位置
reset($day_name);
while (key($day_name) !== $day_start) {
    next($day_name);
}

// 开始收集5天的日期
while(count($five_days) < 5) {
    // 添加当前指针指向的星期名
    array_push($five_days, current($day_name));
    // 移动指针到下一个,如果到末尾就回到开头(处理周日之后跳周一的情况)
    next($day_name);
    if (!current($day_name)) {
        reset($day_name);
    }
}

echo '<pre>';
print_r($five_days);
echo '</pre>';

代码逻辑说明

  • 定位当天:先用reset()把数组指针重置到开头,然后循环移动指针,直到找到和$day_start(当前星期的数字键)匹配的位置,这样指针就停在当天的星期名上了。
  • 收集5天数据:每次添加当前指针的内容后,用next()往后移动指针;如果指针走到数组末尾(current()返回false),就用reset()回到开头,完美处理跨周末的情况。
  • 终止条件:当$five_days里有5个元素时,循环停止,避免无限循环。

更简洁的替代方案

如果你不想折腾数组指针,也可以直接通过计算键值来获取日期,逻辑更直观:

$day_name = array( 1=>'Monday', 2=>'Tuesday', 3=>'Wednesday', 4=>'Thursday', 5=>'Friday', 6=>'Saturday', 7=>'Sunday');
$day_start = date('N');
$five_days = array();

for ($i = 0; $i < 5; $i++) {
    // 计算当前的星期键,模7处理循环,确保不会超出1-7的范围
    $current_key = ($day_start + $i - 1) % 7 + 1;
    $five_days[] = $day_name[$current_key];
}

echo '<pre>';
print_r($five_days);
echo '</pre>';

这个方法不用操作指针,直接通过数学计算拿到对应的星期名,出错概率更低,也更容易维护。

内容的提问来源于stack exchange,提问作者Rickie Knight

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 07:07:26