如何在PHP和XML中使用foreach(simplexml)

Hak*_*kan 7 php xml simplexml

知道PHP和XML的人吗?那请看看!

这是我的PHP代码:

<? $xml = simplexml_load_file("movies.xml");
foreach ($xml->movie as $movie){ ?>

<h2><? echo $movie->title ?></h2>
<p>Year: <? echo $movie->year ?></p>
<p>Categori: <? echo $movie->regions->region->categories->categorie ?></p>
<p>Country: <? echo $movie->countries->country ?></p>

<? } ?>
Run Code Online (Sandbox Code Playgroud)

这是mys XML文件:

<?xml version="1.0" encoding="UTF-8"?>
<movies>
 <movie>
  <title>A movie name</title>
  <year>2010</year>
     <regions>
   <region>
    <categories>
      <categorie id="3">Animation</categorie>
      <categorie id="5">Comedy</categorie>
      <categorie id="9">Family</categorie>
     </categories>
    <countries>
     <country id="123">USA</country>
    </countries>
   </region>
  </regions>
 </movie>
 <movie>
  <title>Little Fockers</title>
  <year>2010</year>
     <regions>
   <region>
    <categories>
     <categorie id="5">Comedy</categorie>
             </categories>
        <countries>
         <country id="123">USA</country>
    </countries>
   </region>
  </regions>
 </movie>
</movies>
Run Code Online (Sandbox Code Playgroud)

上面代码的结果是:

<h2>A movie name</h2>
<p>Year: 2010</p>
<p>Category: Animation</p>
<p>Country: USA</p>

<h2>Little Fockers</h2>
<p>Year: 2010</p>
<p>Category: Comedy</p>
<p>Country: USA</p>
Run Code Online (Sandbox Code Playgroud)

我希望它像这样(见第一部电影的类别):

<h2>A movie name</h2>
<p>Year: 2010</p>
<p>Category: Animation, Comedy, Family</p>
<p>Country: USA</p>

<h2>Little Fockers</h2>
<p>Year: 2010</p>
<p>Category: Comedy</p>
<p>Country: USA</p>
Run Code Online (Sandbox Code Playgroud)

注意:我也想知道如何在单词之间加上逗号,但在最后一个单词上没有逗号...

Jon*_*nah 26

试试这个.

<?php
$xml = simplexml_load_file("movies.xml");
foreach ($xml->movie as $movie) {

    echo '<h2>' . $movie->title . '</h2>';
    echo '<p>' . $movie->year . '</p>';

    $categories = $movie->regions->region->categories->categorie;

    while ($categorie = current($categories)) {
        echo $categorie;
        echo next($categories) ? ', ' : null;
    }

    echo '<p>' . $movie->countries->country . '</p>';
}
?>
Run Code Online (Sandbox Code Playgroud)

  • +1用于删除尾随逗号.`while($ categorie = current($ movie - > ...-> categorie))`和`echo next($ movie - > ...-> categorie)?',':'';`也有效. (7认同)

Seb*_*eck 6

这是将 foreach 与 simplexmlElement 一起使用的方式:

$xml = simplexml_load_file("movies.xml");
foreach ($xml->children() as $children) {
    echo $children->name;
}
Run Code Online (Sandbox Code Playgroud)


Dan*_*ugg 1

您还需要迭代categorie元素,就像迭代movies.

echo '<p>';
foreach($movie->regions->region->categories->categorie as $categorie){
    echo $categorie . ', ';
}
echo '</p>';
Run Code Online (Sandbox Code Playgroud)

您可能还想修剪尾随,


我的评论中提到的方法:

$categories = $movie->regions->region->categories->categorie;
while($category = current($categories)){
    echo $category . next($categories) ? ', ' : '';
}
Run Code Online (Sandbox Code Playgroud)