0

データベースから xml フィードを取得する次のコードがある場合、それらを SimpleXMLElement 配列に変換します。

try{
    function processLink( $link , $appendArr ){
    ## gets url from database as outlined above.
        $xmlUrl = $link;
        #Loads the url above into XML    
        $ConvertToXml = simplexml_load_file($xmlUrl);
        # -> Setup XML
        $appendArr[] = $ConvertToXml->channel->item;
    }
    #Connect to DB
    require_once '../../src/conn/dbc.php';
    $dbconn = new PDO('mysql:host=localhost;port=3306;dbname=mydb',$db_user,$db_pass,array(PDO::ATTR_PERSISTENT => true));
    $q = $dbconn->prepare("SELECT FW_ArtSrcLink FROM FW_ArtSrc WHERE OneSet=:OneSet and leagID = :TheLeagueID");
    $q->execute(array(':OneSet' => 1, ':TheLeagueID' => 14));    # SET LEAGUE HERE.
    $result = $q->fetchAll();
    $newsStory = array();

    foreach ($result as $value ){
            if ( is_array($value) ){
                foreach ( $value as $secondValue ){
                    processLink($secondValue , &$newsStory);
                }

                continue;
        }

        processLink($value , $newsStory);

    }    
    ## Don't want to do this, I want to output just the [title] and [link]         
    //print_r($newsStory);

}

SimpleXMLElement 配列からキー [タイトル] と [リンク] を抽出したいだけの場合、現在のコードでこれを行うにはどうすればよいですか?

私は使用してみました:

echo 'title'.$newStory->channel->item->title;
echo 'title'.$newStory->title;
echo 'title'.$value->title;

print_r() からの出力:

img2

すべて空白の値で、または何もエコーされません。タイトルリンクの両方を出力するにはどうすればよいですか?

変更:

foreach ($newsStory as $story ) {
        echo "<hr>"."<a href='".$story->link."'>".$story->title."</a>"."<hr>";
    } 

The problem is... it prints some duplicates... how do I get ONLY unique links to display?

img44

更新されたFOREACH:

$stories = array(); // contains all of the stories already output
    foreach ( $newsStory as $story ) {
        if ( ! in_array( $stories, $story->title ) ) {
            $stories[] = $story->title;
            echo "<hr>"."<a href='".$story->link."'>".$story->title."</a>"."<hr>";     
        } //if
    } //foreach

これは警告を出力します(重複を表示しながら):

Warning: in_array() expects parameter 2 to be array, object given on line 39:

基本的にこれは好きではありません:

  if ( ! in_array( $stories, $story->title ) ) {
4

1 に答える 1

1

次のように、結果の配列をループして各アイテムを出力する必要があります。

<?php
$stories = array(); // contains all of the stories already output
foreach ( $newsStory as $story ) {
    if ( ! in_array( (string) $story->title, $stories ) ) {
        $stories[] = (string) $story->title;
        echo 'title'.$story->title;
    }
}

更新:ストーリーがすでに出力されているかどうかを確認するコードを追加しました。

于 2012-08-12T03:00:35.203 に答える