以下代码成功检索并显示XML文件中的名称和价格元素。
我还希望显示XML“store”值的文本,但不希望显示任何重复的商店名称。
所以我创建了storeArray来保存商店的名称,但不知道如何防止重复的商店名称被插入到数组中。
在下面的代码中,“Best Buy”显示两次(使用第二个foreach循环时),但我只希望它显示一次。
有没有办法在storeArray中插入商店的名称,还能防止插入重复的商店名称?
或者,有没有比下面的代码更好的方法呢?
$xmlDoc = simplexml_load_file("products.xml");
$storeArray = array();
foreach($xmlDoc->product as $Product) {
echo "Name: " . $Product->name . ", ";
echo "Price: " . $Product->price . ", ";
$storeArray[] = $Product->store;
echo "<br>";
}
foreach ($storeArray as $store) {
echo $store . "<br>";
}
XML文件:
<products>
<product type="Electronics">
<name> Desktop</name>
<price>499.99</price>
<store>Best Buy</store>
</product>
<product type="Electronics">
<name>Lap top</name>
<price>599.99</price>
<store>Best Buy</store>
</product>
<product type="Hardware">
<name>Hand Saw</name>
<price>99.99</price>
<store>Lowes</store>
</product>
</products>
答案 0 :(得分:1)
您拥有的一个选项是利用关联数组键始终是唯一的这一事实。您可以使用元素或属性名称作为键,使用isset()数组函数来查看该键是否存在。例如:
$xmlDoc = simplexml_load_file("products.xml");
$storeArray = array();
foreach($xmlDoc->product as $Product) {
echo "Name: " . $Product->name . ", ";
echo "Price: " . $Product->price . ", ";
if(!isset($storeArray[$Product->store])
$storeArray[$Product->store] = $Product->store;
echo "<br>";
}
foreach ($storeArray as $store) {
echo $store . "<br>";
}
PHP中的数组可以同时进行数字索引和关联。
我也试图想出一种更优雅的方式来实现这一目标,这只是我头脑中的答案。将根据需要进行编辑。
答案 1 :(得分:0)
您可以重新组织$storeArray
的定义方式,如另一个答案中所述,但也值得考虑“in_array
”。此检查是值已在数组中:
$xmlDoc = simplexml_load_file("products.xml");
$storeArray = array();
foreach($xmlDoc->product as $Product) {
echo "Name: " . $Product->name . ", ";
echo "Price: " . $Product->price . ", ";
if( !in_array( $Product->store, $storeArray ) {
$storeArray[] = $Product->store;
}
echo "<br>";
}
foreach ($storeArray as $store) {
echo $store . "<br>";
}
这样做意味着数组仍然以数字方式编入索引(这可能重要也可能不重要)。