PHP双层for循环需求:1990-2019年每年重复执行脚本5次
解决思路与修正后的代码
嘿,我看你已经搭好了双层循环的框架,不过原代码里有几个细节问题需要调整,才能完美实现「1990年到2019年,每个年份重复执行脚本5次」的需求。我帮你梳理一下并修正代码:
先指出原代码的几个小问题:
- 外层循环的条件里用了逗号(
$i<2019,$i++),PHP里循环条件应该用分号分隔,这会直接导致语法错误; - 外层循环写的是
$i<2019,这样只会遍历到2018年,如果要包含2019年,得改成$i<=2019; - 内层循环
$j<5只会执行4次(j=1、2、3、4),要执行5次的话,应该改成$j<=5或者$j<6; - 你的API请求里没有传入年份参数
$i,这样每次请求的都是同一个接口数据,应该把年份拼到API地址里,才能获取对应年份的内容。
修正后的完整代码
// 初始化存储结果的变量,避免Undefined变量警告 $filmovi = ''; // 外层循环:遍历1990到2019年(包含2019) for ($i = 1990; $i <= 2019; $i++) { // 内层循环:每个年份重复执行5次 for ($j = 1; $j <= 5; $j++) { // 把当前年份$i拼到API地址里,确保每次请求对应年份的数据 $filmApiUrl = "https://your-api-endpoint.com?year={$i}"; // 请求API数据 $sve = file_get_contents($filmApiUrl); // 处理API返回的JSON数据,第二个参数设为true转成关联数组,更易处理 $data = json_decode($sve, true); // 遍历结果集,拼接标题(先判断结果是否存在,避免报错) if (!empty($data['results'])) { foreach ($data['results'] as $value) { $filmovi .= $value['title'] . ","; } } } } // 最后可以去掉末尾多余的逗号(可选优化) $filmovi = rtrim($filmovi, ',');
额外的实用建议:
- API请求限制:频繁请求API可能会触发对方的频率限制,建议在每次请求后加个短暂延迟,比如
sleep(1);(暂停1秒); - 错误处理:
file_get_contents可能会请求失败,建议加上错误捕获,比如检查$sve是否为false,或者用try-catch包裹请求逻辑; - 内存优化:如果数据量很大,
$filmovi会持续占用内存,可考虑每次循环后把数据写入本地文件,而不是一直存在内存里。
内容的提问来源于stack exchange,提问作者Nikola Ranisavljev
相关产品推荐
相关产品推荐

