Hướng dẫn xml foreach php

Anyone that knows PHP and XML out there? Then please have a look!

This is my PHP code:

movie as $movie){ ?>

title ?>

Year: year ?>

Categori: regions->region->categories->categorie ?>

Country: countries->country ?>

This is mys XML file:



 
  A movie name
  2010
     
   
    
      Animation
      Comedy
      Family
     
    
     USA
    
   
  
 
 
  Little Fockers
  2010
     
   
    
     Comedy
             
        
         USA
    
   
  
 

The outcome of the code above is:

A movie name

Year: 2010

Category: Animation

Country: USA

Little Fockers

Year: 2010

Category: Comedy

Country: USA

I want it to be like this (see category on the first movie):

A movie name

Year: 2010

Category: Animation, Comedy, Family

Country: USA

Little Fockers

Year: 2010

Category: Comedy

Country: USA

Note: Also I wonder how to get the comma between the words, but without a comma on the last word...

asked Jan 9, 2011 at 4:02

0

Try this.

movie as $movie) {

    echo '

' . $movie->title . '

'; echo '

' . $movie->year . '

'; $categories = $movie->regions->region->categories->categorie; while ($categorie = current($categories)) { echo $categorie; echo next($categories) ? ', ' : null; } echo '

' . $movie->countries->country . '

'; } ?>

answered Jan 9, 2011 at 4:11

JonahJonah

9,8915 gold badges44 silver badges79 bronze badges

1

this is how you use foreach with an simplexmlElement:

$xml = simplexml_load_file("movies.xml");
foreach ($xml->children() as $children) {
    echo $children->name;
}

answered Nov 6, 2013 at 12:59

Hướng dẫn xml foreach php

regions->region->categories->categorie as $cat){
 $cat_out.= $cat.',';
}
echo rtrim($cat_out,',');
?>

answered Jan 9, 2011 at 4:20

You need to iterate through the categorie elements too, in the same way you've iterated through movies.

echo '

'; foreach($movie->regions->region->categories->categorie as $categorie){ echo $categorie . ', '; } echo '

';

You'll probably want to trim the trailing , as well.


The method mentioned in my comment:

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

answered Jan 9, 2011 at 4:09

Hướng dẫn xml foreach php

Dan LuggDan Lugg

19.7k18 gold badges107 silver badges172 bronze badges

regions->region->categories->categorie as $category) { ?>

Categori:

answered Jan 9, 2011 at 4:10

dqhendricksdqhendricks

18.6k10 gold badges48 silver badges82 bronze badges

function categoryList(SimpleXmlElement $categories){
  $cats = array();
  foreach($categories as $category){
    $cats[] = (string) $category;
  }

  return implode(', ', $cats);

}

Then you can jsut call it from your loop like:

regions->region->categories); ?>

Using an array and implode removes the need for logic of counting and detecting the last category.

Isolating it in a function makes it easier to maintain and is less confusing than nesting the loop (though admittedly nested loops arent that confusing).

answered Jan 9, 2011 at 4:14

prodigitalsonprodigitalson

59.5k9 gold badges97 silver badges112 bronze badges

Try This one

$xml = ... // Xml file data
$Json = Xml_to_Json($xml);
$array = json_decode($Json,true);
echo '
'; print_r($array);
foreach ($array as $key => $value) {
    foreach ($value as $key1 => $value1) {
        echo '

'.$value1['title'].'

Year: '.$value1['year'].'

Category: '; foreach ($value1['regions']['region']['categories']['categorie'] as $categoriekey => $categorie) { echo $categorie.' '; } echo 'Animation

Country: '.$value1['regions']['region']['countries']['country'].'

'; } } function Xml_to_Json($array){ $xml = simplexml_load_string($array, "SimpleXMLElement", LIBXML_NOCDATA); $json = json_encode($xml); return $json; }

answered Jun 25, 2016 at 12:32

Ajay KumarAjay Kumar

1,30412 silver badges22 bronze badges

2