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スクリプトに含まれているスラッシュドット スクレイピングの例を少し変更したバージョンです。特にない。

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 = array();

現在、$output のエコーはループ内にあり、次のような出力が作成されます。

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

echo $output をループの外側に配置するか、または $oututut = ''; ループ内。

于 2013-03-28T23:36:30.673 に答える