使用If进行PHP数组比较

使用If进行PHP数组比较,php,arrays,xml,simplexml,Php,Arrays,Xml,Simplexml,我很难理解为什么不能在PHP中比较两个数组的值。如果我在循环过程中使用“echo$description->ItemDesriptionName;”和“echo$item->ItemName;”来回显这两个值,那么这些值看起来是相同的,但是当我尝试使用If来比较它们时,没有任何效果。我错过了什么 <?php $xml=simplexml_load_file("test.xml") or die("Error: Cannot create object"); $categories = $

我很难理解为什么不能在PHP中比较两个数组的值。如果我在循环过程中使用“echo$description->ItemDesriptionName;”和“echo$item->ItemName;”来回显这两个值,那么这些值看起来是相同的,但是当我尝试使用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>

第一类
项目1
1.
项目2
3.
项目1
好东西
项目2
一个伟大的项目,以及

您是否可以使用一致的索引直接访问它们

$items=$xml->Menu->Categories->items->ItemObject;
$itemsdescription=$xml->Menu->Options->Description;
$i=0;
foreach($items作为$item){
回显$i.'.$item->ItemName.'-'.$item->Price;
echo$itemdescription->DescriptionObject[$i]->ItemDescriptionName[0];
回声';
echo$itemsdescription->DescriptionObject[$i]->itemsdescription[0];
回音“
”; $i++; }
您是否可以使用一致的索引直接访问它们

$items=$xml->Menu->Categories->items->ItemObject;
$itemsdescription=$xml->Menu->Options->Description;
$i=0;
foreach($items作为$item){
回显$i.'.$item->ItemName.'-'.$item->Price;
echo$itemdescription->DescriptionObject[$i]->ItemDescriptionName[0];
回声';
echo$itemsdescription->DescriptionObject[$i]->itemsdescription[0];
回音“
”; $i++; }
比较为字符串 并且您在ItemDescriptionName(ItemDescriptionName)中有输入错误

比较为字符串 并且您在ItemDescriptionName(ItemDescriptionName)中有输入错误


转换为字符串,然后比较

<?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";
            }
        } 
}

?>


对我来说工作正常

转换为字符串,然后比较

<?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";
            }
        } 
}

?>


对我来说工作正常

$description->itemsdescriptionname
这样的属性是
simplexmlement
对象。因此,您不会比较字符串,而是比较两个对象

SimpleXMLElement
对象实现了神奇的方法
\uuuToString()
。它们可以自动转换为字符串,但与对象之间的比较不会触发该转换。你可以强制它:

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

$description->itemsdescriptionname
这样的属性是
simplexmlement
对象。因此,您不会比较字符串,而是比较两个对象

SimpleXMLElement
对象实现了神奇的方法
\uuuToString()
。它们可以自动转换为字符串,但与对象之间的比较不会触发该转换。你可以强制它:

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

如果你在这里有一个输入错误,你的源代码中是否也有输入错误?ItemDescriptionName属性的说明缺少一个“n”源没有,但仍然不起作用。谢谢如果你这里有输入错误,你的源代码中也有输入错误吗?ItemDescriptionName属性的说明缺少一个“n”源没有,但仍然不起作用。谢谢