我对range()有一个非常奇怪的问题; 根据文件:
Create an array containing a range of elements
但是当我这样做时:
foreach (range(900,950,1) as $art_id){
//ob_start();
//do stuff
//do a lot more stuff
echo $art_id;
//ob_get_clean(); }
甚至
$arts_id = range (900, 920);
foreach ($arts_id as $art_id){
//ob_start();
//do stuff
//do a lot more stuff
echo $art_id;
//ob_get_clean(); }
输出在像
这样的系列中扼杀重复 "900,900,901,900,901,902,900,901,9002,903,900..."
意味着它会在每次循环后返回第一个ID。
(1st iteration -> 900
2nd iteration -> 900,901
3rd iteration -> 900,901,902
...)
当我只是放一个手动数组时,它按顺序完美运行,没有重复:
$arts_id = array(900,901,902,903,904,905,906,907,908,909,910...);
我做错了什么(再次?)
编辑我
这是整个脚本:
它实际上是simplehtmldom脚本中包含的slashdot抓取示例的略微修改版本。没什么特别的。
它在WP内部执行但在OUTSIDE循环中执行..
答案 0 :(得分:3)
它必须在你的代码的其余部分,因为这很好。 请分享更多的剧本。
看起来foreach嵌套在similair foreach中,
$arts_id = range (900, 920);
foreach ($arts_id as $art_id){
foreach (range (900,$art_id) as $art_id2){
echo $art_id2."<br/>";
}
}
这会产生你所描述的输出
修改强>
我个人将函数scraping_slashdot添加为变量$ ret的重置以防万一。
例如: $ ret = array();
目前$ output的回显在循环内,这会产生如下输出:
Article 1
Article 1, Article 2
Article 1, Article 2, Article 3
etc.
在循环外放置echo $ output,或$ ouptut ='';在循环中。