I'm using PHP to collect attributes from an XML file.
Eg:
<?xml version="1.0"?>
<menu restaurant="edible things"> <!-- Root Node -->
<section category="Fruit">
<item> Apple
<price variant="small"> 2.50 </price>
<price variant="large"> 3.75 </price>
</item>
<item> Banana
<price variant="small"> 1.85 </price>
<price variant="medium"> 2.00 </price>
<price variant="large"> 2.85 </price>
</item>
</section>
<section category="Instruments">
<item> Piano
<price variant="red"> 100.00 </price>
<price variant="yellow"> 3000.00 </price>
</item>
<item> Tuba
<price variant="red"> 60.00 </price>
<price variant="yellow"> 250.00 </price>
</item>
</section>
</menu>
My goal is to create an array/list of the price variants with no duplicates. To that end I have implemented the following PHP (collected in a web page):
<?php
foreach ($xml->section as $section) {
echo '<h2>'.$section['category'].'</h2><br />';
$arr = array();
foreach ($section->item as $item) {
foreach ($item->price as $price) {
if (!in_array($price['variant'], $arr)) {
array_push($arr, $price['variant']);
}
else {
}
}
}
$arrlength = count($arr);
for($x = 0; $x < $arrlength; $x++) {
echo $arr[$x];
echo '<br>';
}
}
?>
Unfortunately, in this instance I get an array that contains every attribute value, including duplications. If I cut either foreach loop out, I get only (a) attributes for the first item in section, or (b) the first variant for all items, respectively.
I realize that I'm having a problem with understanding how nesting works. How do you build an array with only unique values?