2014-02-15 21 views
0

正常工作下面被用来检索从下面的XML文件中的“存储”元素的值和值插入到一个数组(该storeArray)的代码。我不希望将重复值放入数组(IE我不希望百思买插入两次),所以我使用in_array方法 以防止重复。PHP的in_array功能不与XML

此代码不能防止重复(IE百思买两次显示):

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

回答

2

尝试这样做

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

因为$Product->store不是字符串:这是一个SimpleXMLElement对象。所以你应该在它的操作之前把它作为字符串。

+0

除了字符串之外,最初可以投射什么变量类型? –

+0

@SetSailMedia你可以强制任何类型(数组)(布尔)(字符串)...问题是如果结果是你所期望的。 :) –

+0

谢谢!有效! –