2011-04-24 17 views
0

我想比較2個數組中的2個值,1個數組來自XML文件,另一個是全局數組。嵌套的foreach&if語句試圖回顯數組值是令人困惑的

我不知道確切的數量和它們隨時間而改變,但例如,

的XML數組有100個值。
全局數組有5個值。

比較是針對簡單的文本字符串,如果它們匹配回聲「匹配」,如果不是回聲「不匹配」。

問題是,我無法弄清楚如何在沒有循環遍歷foreach的情況下回顯正確的值數量,而不是僅僅在打印「不匹配」時纔會回顯500次。

我其實希望輸出匹配全局數組值,所以在實例中回顯「不匹配」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"; 

      } 
      }    
     } 
    } 
+1

你是對的一件事:這是令人困惑 – 2011-04-24 05:38:22

回答

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

?> 
+0

我認爲這是更多的方向我想去,我剛剛讀了'array_intersect'。使用你的代碼,雖然我得到的匹配沒有真正的匹配時,如果我'print_r($匹配)'結果只是'Array();'和var_dump得到我0 – Wyck 2011-04-24 06:31:31

+0

其實在閱讀後,我認爲array_intersect剛剛返回沒有比賽,所以沒有必要數,正確? – Wyck 2011-04-24 06:38:32

+0

語句'if(array()== true)'是真的,所以如果你需要比較它,我認爲在這種情況下count()是必要的 – Ragnar123 2011-04-24 12:44:42

2

Ragnar123'solution看起來不錯,唯一的一個錯誤讓您打印「匹配找到」即使沒有匹配

if (count($matches > 0)) 

shoule是

if (count($matches) > 0) 

因爲count(boolean)會返回(int)1所以你總是會通過if if