簡體   English   中英

PHP:SimpleXML和數組

[英]PHP: SimpleXML and Arrays

當我運行此代碼時:

foreach($xml->movie as $movie) { 
    if(isset($movie->photos)) { 
        foreach ($movie->photos as $photo) { 
            echo $photo." "; 
        } 
        echo "<hr/>"; 
    }
}

我得到了很好的實際數據輸出,例如一行看起來像

06397001.jpg 06397002.jpg 06397003.jpg 06397004.jpg 06397005.jpg

但是,當我將其放入數組時,它包含所有SimpleXML包裝器標簽,而jpgs不在數組的根目錄。

碼:

foreach($xml->movie as $movie) { 
    if(isset($movie->photos)) { 
        $photos = array(); 
            foreach ($movie->photos as $photo) { 
                $photos[] = $photo; 
            } 
    } else $photos = ""; 
    var_dump($photos); 
    echo "<hr />"; 
}

例如同一行看起來像

array(5) { 
    [0]=> object(SimpleXMLElement)#11 (1) { 
        [0]=> string(12) "06397001.jpg" 
    }
    [1]=> object(SimpleXMLElement)#12 (1) {
        [0]=> string(12) "06397002.jpg" 
    } 
    [2]=> object(SimpleXMLElement)#13 (1) {
        [0]=> string(12) "06397003.jpg"
    }
    [3]=> object(SimpleXMLElement)#14 (1) {
        [0]=> string(12) "06397004.jpg"
    }
    [4]=> object(SimpleXMLElement)#15 (1) {
        [0]=> string(12) "06397005.jpg"
    }
}

為什么會發生這種情況/如何刪除它,以便像在回顯時一樣在根級別獲得一系列照片?

SimpleXMLElement結果看起來像簡單的對象和數組,但是做了一些普通對象和數組無法做到的神奇事情。 它是通過這種方式設計的,因此您可以使用更少的代碼。

您可能可以通過以下方式解決您的問題:

foreach($xml->movie as $movie) { 
  if(isset($movie->photos)) {
    $photos = array();
    foreach ($movie->photos as $photo) {
      $photos[] = "$photo"; 
      // or you could use, I believe: $photos[] = $photo[0] 
    }
  } 
  else $photos = "";
  var_dump($photos); echo "<hr />";
}

為什么會這樣呢? 因為當將SimpleXML元素視為字符串時,其行為就像是字符串一樣,其值是該元素的文本內容。 在您的第一個示例中,echo的使用將元素視為字符串,因此它只是返回了字符串。

我知道這個問題已經很老了,而且已經得到了回答,但是由於我今天遇到了這個問題,並且我發現了相對更好,更簡單的解決方案,並且不涉及大量循環,所以我想與大家分享一下。

首先,考慮到您的xml結構以及您不需要電影信息的事實,您不需要遍歷它們,而是收集所有照片,並且只能通過xpath來完成。

如果你有多部電影

$photos = $xml->xpath('//movie//photos'); // double slash means get all elements with that tag name.

換句話說,從所有電影中獲取所有照片。 此代碼將為您提供一個SimpleXMLElements數組,該數組具有鍵[0]和圖像名稱的值。 為了獲得圖像名稱而不會僅僅將其作為字符串循環,可以簡單地將該元素轉換為字符串,然后將其輸出為字符串,而不是SimpleXMLElement!

您現在可能需要的唯一循環是:

foreach($photos as $photo) {
    dump( (string) $photo); // this will output the image name as a string e.g. "06397002.jpg"
}

干杯,我希望它能幫助需要它的人

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM