以下代码用于从下面的XML文件中检索“store”元素的值,并将值插入数组(storeArray)。我不希望将重复值放入数组(IE我不希望Best Buy插入两次),所以我使用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( (string)$Product->store, $storeArray )) {
$storeArray[] = (string)$Product->store;
}}
foreach ($storeArray as $store) {
echo $store . "<br>";
}
但是当我尝试将这些数组值(来自XML存储元素)放入链接(如下所示)时,值会重复(IE Best Buy会显示两次。有什么建议吗?
if( !in_array( (string)$Product->store, $storeArray )) {
$storeArray[] = "<a href='myLink.htm'>" . (string)$Product->store . "</a>";
foreach ($storeArray as $store) {
echo $store . "<br>";
}
这是XML文件:
<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)
您的in_array
支票存在问题。您正在检查商店是否在数组中,但实际上是将链接添加到数组中,因此in_array
将始终为false。
糟糕的检查:
// you are checking the existance of $Product->store
if (!in_array((string)$Product->store, $storeArray)) {
// but add something else
$storeArray[] = "<a href='myLink.htm'>" . (string)$Product->store . "</a>";
}
而是尝试将商店用作数组键:
$store = (string)$Product->store;
if (!array_key_exists($store, $storeArray)) {
$storeArray[$store] = "<a href='myLink.htm'>" . $store . "</a>";
}
答案 1 :(得分:0)
你的方法很好。它不会将值添加到$ storeArray两次。 我认为您在显示的第二个代码块中有一个关闭括号的错误。 看到这个phpfiddle - 它的工作原理:
http://phpfiddle.org/main/code/1ph-6rs
您还可以使用array_unique()函数打印唯一值。