2016-10-26 4 views
0

Мне сложно понять, почему я не могу сравнивать значения двух массивов в PHP. Если я повторяю оба из них во время цикла, используя «echo $ description-> ItemDesriptionName;» и "echo $ item-> ItemName;" значения кажутся одинаковыми, но когда я пытаюсь их сравнить, используя, если ничего не работает. Что мне не хватает?Сравнение массивов PHP с использованием If

<?php 

$xml=simplexml_load_file("test.xml") or die("Error: Cannot create object"); 
$categories = $xml->Menu->Categories; 
$items = $xml->Menu->Categories->Items->ItemObject; 
$itemdescription = $xml->Menu->Options->Description->DescriptionObject; 

foreach($items as $item) { 

    echo $item->ItemName . ' - ' . $item->Price . '</br>'; 

     foreach ($itemdescription as $description) { 

      if ($description->ItemDescriptionName == $item->ItemName) { 
       echo 'We have a match!'; 
       //where I would echo $description->ItemDescription; 
      } 
     } 
} 

?> 

Вот файл XML

<?xml version="1.0" encoding="utf-8"?> 
<Root> 
    <Menu> 
     <Categories> 
      <Name>Category 1</Name> 
      <Items> 
       <ItemObject> 
        <ItemName>Item 1</ItemName> 
        <Price>1</Price> 
       </ItemObject> 
       <ItemObject> 
        <ItemName>Item 2</ItemName> 
        <Price>3</Price> 
       </ItemObject>    
      </Items> 
     </Categories> 
     <Options> 
      <Description> 
       <DescriptionObject> 
        <ItemDescriptionName>Item 1</ItemDescriptionName> 
        <ItemDescription>A Great item</ItemDescription> 
       </DescriptionObject> 
       <DescriptionObject> 
        <ItemDescriptionName>Item 2</ItemDescriptionName> 
        <ItemDescription>A Great item as well</ItemDescription> 
       </DescriptionObject>     
      </Description> 
     </Options> 
    </Menu> 
</Root> 
+0

У вашего IF есть опечатка, есть ли у вас опечатка в вашем источнике? Описание свойства ItemDescriptionName отсутствует 'n' – Graeme

+0

Источник не сделал, но он все еще не работает. Спасибо – Giovanni

ответ

2

сравнить как строка и у вас есть опечатка в ItemDescriptioName (ItemDescriptio п Имя)

if ((string)$description->ItemDescriptionName == (string)$item->ItemName) { 
+0

Конечно ... Простой. Спасибо. – Giovanni

0

Вы можете получить доступ к ним напрямую, а с помощью соответственный индекс?

...

$items = $xml->Menu->Categories->Items->ItemObject; 
$itemdescription = $xml->Menu->Options->Description; 

$i = 0; 
foreach ($items as $item) { 
    echo $i.' '.$item->ItemName . ' - ' . $item->Price; 
    echo $itemdescription->DescriptionObject[$i]->ItemDescriptionName[0]; 
    echo ' '; 
    echo $itemdescription->DescriptionObject[$i]->ItemDescription[0]; 
    echo '</br>'; 
    $i++; 
} 
1

Преобразовать в строку, а затем сравнить

<?php 
$xml=simplexml_load_file("test.xml") or die("Error: Cannot create object"); 
$menu = $xml->Menu; 
$categories = $xml->Menu->Categories; 
$items = $xml->Menu->Categories->Items->ItemObject; 
$itemdescription = $xml->Menu->Options->Description->DescriptionObject; 
foreach($items as $item) { 


     $itemname = $item->ItemName; 
     foreach ($itemdescription as $description) { 
      $descriptionname = $description->ItemDescriptionName ; 
      echo $itemname." ---- ".$descriptionname."<br/>"; 

      if((string)$itemname === (string)$descriptionname){ 
       echo "Yes its matched"; 
      } 
     } 
} 

?> 

Работаю отлично для меня

1

Недвижимость $description->ItemDescriptionNameSimpleXMLElement Объектов. Поэтому вы не сравниваете строки, а два объекта.

SimpleXMLElement объекты реализуют магический метод __toString(). Они могут быть введены в строку автоматически, но сравнение между объектами не вызывает этого. Вы можете заставить его:

if ((string)$description->ItemDescriptionName === (string)$item->ItemName) { 
    ...