PHP - in_array函数在检测URL时正常工作

时间:2014-02-15 17:50:11

标签: php xml arrays

以下代码用于从下面的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>

2 个答案:

答案 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()函数打印唯一值。