【问题标题】:PHP Array Comparison using If使用 If 的 PHP 数组比较
【发布时间】:2016-10-26 23:57:39
【问题描述】:

我很难理解为什么我不能在 PHP 中比较两个数组的值。如果我在循环期间使用“echo $description->ItemDesriptionName;”回显这两个和“回声 $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>

【问题讨论】:

  • 您的 IF 此处有错字,您的来源中是否也有错字? ItemDescriptionName 属性的描述缺少“n”
  • 源没有,但它仍然不起作用。谢谢

标签: php arrays xml simplexml


【解决方案1】:

比较为字符串 并且您在 ItemDescriptioName (ItemDescriptionName)

中有错字
if ( (string)$description->ItemDescriptionName == (string)$item->ItemName) {

【讨论】:

    【解决方案2】:

    转成字符串再比较

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

    对我来说很好

    【讨论】:

      【解决方案3】:

      $description-&gt;ItemDescriptionName 这样的属性是SimpleXMLElement 对象。因此,您不比较字符串而是比较两个对象。

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

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

      【讨论】:

        【解决方案4】:

        您可以直接访问它们而不是使用一致的索引吗?

        ...

        $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++;
        }
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2021-08-25
          • 1970-01-01
          • 2015-12-19
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-05-05
          相关资源
          最近更新 更多