2

我对 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...);

我做错了什么(再次??)

编辑我

这是整个脚本:

http://pastebin.com/ZHm3ub6n

它实际上是simplehtmldom脚本中包含的 slashdot 抓取示例的略微修改版本。没什么特别的。

它在 WP 内部但在循环之外执行..

4

1 回答 1

3

它必须在您的代码的其余部分中,因为它可以正常工作。请分享更多脚本。

看起来 foreach 嵌套在类似的 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 = 数组();

目前 $output 的回声在循环内,它会创建如下输出:

Article 1
Article 1, Article 2
Article 1, Article 2, Article 3
etc.

将 echo $output 放在循环之外,或者 $ouptut = ''; 循环内。

于 2013-03-28T23:36:30.673 回答