嵌套的foreach&如果试图回显数组值的语句令人困惑

时间:2011-04-24 05:36:26

标签: php arrays foreach

我试图比较来自2个数组的2个值,1个数组来自XML文件,1个是全局数组。

我不知道确切的金额,它们会随着时间的推移而发生变化,例如,

XML数组有100个值 全局数组有5个值。

比较是针对一个简单的文本字符串,如果它们匹配echo“匹配”,如果不匹配“不匹配”。

问题是,我无法弄清楚如何在没有循环遍历foreach的情况下回显正确的值,而不是仅仅在它回显500次后打印“不匹配”。

我实际上希望输出与全局数组值匹配,因此在实例echo中“不匹配”5次。

在我学习的过程中,我的方法可能是一个非常根本的错误。

$xml_string = simplexml_load_string($xml_body);

  // parse  XML feed 

    foreach ($xml_string->xpath('//plugin') as $character) {

        $xml_plugin_name = $character->name;

        $compare_value_remote = $xml_plugin_name;


   //grab the values we want from the global array     

        foreach ( $plugins as $key => $value ) {

         foreach ($value as $pkey){

          $plugin_name = $pkey["Name"];

          $compare_value_local =  $plugin_name;

    //compare them

             if( $compare_value_remote == $compare_value_local){

              echo "match";

             }else{

              echo "no match";

             }
           }             
       }
    }

2 个答案:

答案 0 :(得分:2)

Ragnar123解决方案看起来不错,只有一个错误让你打印“匹配发现”即使没有匹配

if (count($matches > 0)) 

shoule be

if (count($matches) > 0) 

因为count(boolean)将返回(int)1所以你总是会传递if

答案 1 :(得分:1)

如果我理解正确,你想找到匹配的。

尝试查看此代码

<?php

$xml_string = simplexml_load_string($xml_body);

foreach ($xml_string->xpath('//plugin') as $character)
        $xml_plugins[] = $character->name;

foreach ($plugins as $value) 
    foreach ($value as $pkey)
        $global_plugins[] = $pkey["Name"];

$matches = array_intersect($xml_plugins, $global_plugins);

if (count($matches) > 0) 
    echo "Match found";
else
    echo "No match found";

?>