2016-10-26 53 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) { 
    ...