0

RSSフィード内の最新の3つのニュース記事を解析しようとしています。その後、説明の「プレビュー」を作成し、タイトルとプレビューを表示する必要があります。最初の記事を3回表示してもらいました...

<?php
$doc = new DOMDocument();
$doc->load('http://info.arkmediainc.com/CMS/UI/Modules/BizBlogger/rss.aspx?tabid=575593&moduleid=1167800&maxcount=25&t=16c4c7582db87da06664437e98a74210');
$arrFeeds = array();
foreach ($doc->getElementsByTagName('item') as $node) {
    $itemRSS = array ( 
        'title' => $node->getElementsByTagName('title')->item(0)->nodeValue,
        'link' => $node->getElementsByTagName('link')->item(0)->nodeValue,
        'description' => $node->getElementsByTagName('description')->item(0)->nodeValue,
        'pubDate' => $node->getElementsByTagName('pubDate')->item(0)->nodeValue
    );
    array_push($arrFeeds, $itemRSS);
}
$itemRSS = array_slice($itemRSS, 0, 3); // This cuts it down to 3 articles.


for ($i = 0; $i < 3; $i++) 
{
    $title = $itemRSS['title'];
    $description = substr($itemRSS['description'],0,100);
    echo("<h2>".$title."</h2>");
    echo("<br />".$description."<br />");
}
?>

また、foreachループを使用して「機能」(最初の3つを表示)しました...

/*
foreach($itemRSS as $ira)
{
    $title = $itemRSS['title'];
    $description = substr($itemRSS['description'],0,100);
    echo("<h2>".$title."</h2>");
    echo("<br />".$description."<br />");
}
*/

私にはあまり意味がないので、コメントアウトされています。

助けてください!ありがとう!

4

2 に答える 2

0

RSS アイテムを にプッシュ$arrFeedsし、インデックスによってこれらにアクセスできるようになりました。たとえば$arrFeeds[0]、最初の RSS アイテムになります。

for ($i = 0; $i < 3; $i++) 
{
  $title = $arrFeeds[$i]['title'];
  $description = substr($arrFeeds[$i]['description'],0,100);
  echo("<h2>".$title."</h2>");
  echo("<br />".$description."<br />");
}

しかし、次の方が優れています: with foreach:

$theFirstThreeArticles = array_slice($arrFeeds, 0, 3); // This cuts it down to 3 articles.

foreach($theFirstThreeArticles as $ira)
{
  $title = $ira['title'];
  $description = substr($ira['description'],0,100);
  echo("<h2>".$title."</h2>");
  echo("<br />".$description."<br />");
}
于 2012-07-17T21:48:16.850 に答える
0

foreach を使用する場合、それが受け入れる可能性のある「パラメーター」が 2 つ (この場合は 3 つある場合もあります) あります。トラバースする配列と各要素を格納する変数。この例:

$numbers = array('one', 'two');
foreach($numbers as $number) {
    echo "\nNew Iteration\n";
    var_dump($numbers);
    var_dump($number);
}

出力します

New Iteration
array(2) {
  [0] => string(3) "one"
  [1] => string(3) "two"
}
string(3) "one"

New Iteration
array(2) {
  [0] => string(3) "one"
  [1] => string(3) "two"
}
string(3) "two"

イテレータが配列を変更することはありません。$number要素がなくなるまで、配列内の各要素の値に設定されます。同じ原則がforループにも当てはまります。以下のコードは、上記と同じものを生成します

$numbers = array('one', 'two');
for($i = 0; $i < count($numbers); $i++) {
    echo "\nNew Iteration\n";
    var_dump($numbers);
    var_dump($numbers[$i]);
}

多次元配列を使用する場合も同様です。forまたはを選択した場合foreachでも、配列内の各要素にアクセスする必要があります。したがって、コードは次のようになります。

foreach($rssItems as $rssItem)
{
    $title = $rssItem['title'];
    $description = substr($rssItem['description'],0,100);
    echo("<h2>".$title."</h2>");
    echo("<br />".$description."<br />");
}

foreach を使用することにしたのは、PHP に反復を処理させる方がはるかに簡単だとわかったからです。さらに、このforeach行は英語で正しく読み上げられます。$rssItemsエイリアス内の各アイテムについて、 $rssItem. 複数形と単数形の違いに注意してください。はforeach、各アイテムに対してブロックを実行し、$rssItems反復ごとに、変数にはループがオンになっている$rssItem現在の値が含まれます。$rssItems

を使用する理由がもっと欲しいforeachですか?キーも扱う必要がある場合、 foreach はハッシュ (配列) のすべての要素のキーと値の両方を提供します。

$words = array('hola' => 'hello', 'adios' => 'goodbye', 'gracias' => 'thank you');
foreach($words as $spanishWord => $englishTranslation) {
    echo $spanishWord . " in English is " . $englishTranslation . "\n";
}

Foreach を使用すると、SPLを使用して、反復子を拡張または実装するクラスを作成することもできます。コレクションを含むクラスは、クラスとして機能できますが、反復できます。例えば:

class PhotoAlbum implements IteratorAggregate {
    private $pictures = array();

    public function __construct($pictures) {
        $this->pictures = $pictures;
    }

    public function addPicture($picture) {
        $this->pictures[] = $picture;
    }

    public function share($friend) {
        // etc..
    }

    public function getIterator() {
        return new ArrayIterator($this->pictures);
    }
}

$album = new PhotoAlbum($picturesArrayFromDB);
foreach($album as $picture) {
    echo $picture;
}
于 2012-07-17T22:03:43.480 に答える