2014-02-15 2 views
0

Код ниже используется для извлечения значения элемента «store» из файла XML ниже и вставки значений в массив (storeArray). Я НЕ хочу, чтобы в массив было добавлено повторяющееся значение (IE не хочу, чтобы Best Buy вставлялся дважды), поэтому я использую метод in_array для предотвращения дублирования.Функция in_array PHP неправильно работает с XML

Этот код не предотвращает дублирование (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> 

ответ

2

Попробуйте сделать это

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

потому что $Product->store не является строкой: это SimpleXMLElement объект. Поэтому перед его манипулированием вы должны использовать его как строку.

+0

Какой тип переменной можно было бы отличать изначально, кроме строки? –

+0

@SetSailMedia вы можете использовать любой тип (массив) (bool) (строка) ... проблема в том, что результат - то, что вы ожидали. :) –

+0

Спасибо! Это сработало! –

Смежные вопросы