PHP的in_array函数与XML无法正常工作

时间:2014-02-15 12:55:51

标签: php xml

以下代码用于从下面的XML文件中检索“store”元素的值,并将值插入数组(storeArray)。我不希望重复值放入数组(IE我不希望Best Buy插入两次),所以我使用的是in_array方法 防止重复。

此代码不会阻止重复(IE Best Buy会显示两次):

$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;
    }
}

foreach ($storeArray as $store) {
    echo $store . "<br>";
}

但是这段代码确实有效:

$practiceArray = array('Product1', 'Product2', 'Product3');

if (in_array("Product1", $practiceArray)) {
    echo "Is in array";}
else {  
    echo "NOT in array";
}

有什么建议吗?

这是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>

1 个答案:

答案 0 :(得分:2)

尝试这样做

if( !in_array( (string)$Product->store, $storeArray )) {
    $storeArray[] = (string)$Product->store;
}

因为$Product->store不是字符串:它是SimpleXMLElement对象。因此,您应该在操作之前将其转换为字符串。