2016-10-26 91 views
0

我很難試圖瞭解爲什麼我無法比較兩個數組在PHP中的值。如果我在循環過程中使用「echo $ description-> ItemDesriptionName;」來回顯這兩者,和「echo $ item-> ItemName;」這些值似乎顯示爲相同,但是當我嘗試使用if比較它們時,沒有任何工作。我錯過了什麼?PHP陣列比較使用如果

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

你如果有一個錯字在這裏,它是否也有你的來源錯字? 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->ItemDescriptionName這樣的屬性是SimpleXMLElement對象。所以你不要比較字符串,而是兩個對象。

SimpleXMLElement對象實施神奇的方法__toString()。它們可以被強制轉換爲自動字符串,但是與對象之間的比較不會觸發該對象。你可以強制它:

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