2009-10-14 71 views
5

這一個完全超出了我。我試圖比較兩個字符串。當我回應它們時,它們看起來是相同的,但是當我將它們與'=='運算符進行比較時,它將返回false。例如,在我的數據庫上運行下面的代碼時。它輸出的東西就像「顯然蘋果不等於蘋果」。任何人都可以對此有所瞭解嗎?比較兩個相同的字符串將在PHP中返回false

if ($this->data['list_text']) { //user has entered into textarea 
      $list = nl2br($this->data['list_text']); 

      $list_array = explode('<br />',$list); 

      $ranking = 1; 
      $company_array = $this->CompanyList->CompanyRanking->Company->find('list',null); 

      //this is the comparison bit 
      foreach ($list_array as $key => $value) { 
       $companyId = null; 
       foreach ($company_array as $key2 => $value2) { 
        if ($value2 != $value) { 
         echo 'APPARENTLY '.$value2.' does not equal '.$value;       
        } else { 
         $companyId = $key2; 
         break; 
        } 
       } 

       $this->data['CompanyRanking'][$ranking]['ranking'] = $ranking; 
       $this->data['CompanyRanking'][$ranking]['company_id'] = $companyId; 
       $ranking++; 
      } 
     } 
+0

strcmp()說什麼? – 2009-10-14 11:57:59

回答

2

我同意Olafur。由於您假設$ value和$ value2是companyID,我刪除了trim並將其替換爲preg_replace。您可以在這些快速修改,如果companyID應該是字母數字字符,包含連字符,等等。這個版本應該這樣做:

if ($this->data['list_text']) { 
    $list = nl2br($this->data['list_text']); 
    $list_array = explode('<br />', $list); 

    $ranking = 1; 
    $company_array = $this->CompanyList->CompanyRanking->Company->find('list',null); 

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

     // remove any non digit characters 
     $value = preg_replace('/[^0-9]/i','', $value); 
     $companyId = null; 

     foreach ($company_array as $key2 => $value2) { 

      // remove any non digit characters 
      $value2 = preg_replace('/[^0-9]/i','', $value2); 

      if ($value2 != $value) { 
       echo 'values not equal';     
      } else { 
       $companyId = $key2; 
       break; 
      } 
     } 

     $this->data['CompanyRanking'][$ranking]['ranking'] = $ranking; 
     $this->data['CompanyRanking'][$ranking]['company_id'] = $companyId; 
     $ranking++; 
    } 
} 
+0

非常感謝cballou。事實證明trim()正在工作,但你的代碼比我的效率高得多。 – gomezuk 2009-10-14 12:11:48

3

字符串是否有任何額外的空白,你沒有看到?嘗試修剪它們。

+0

以類似的方式,嘗試使用'echo'APPARENTLY>'。$ value2。'<不等於>'。$ value。'<';'這也將更好地說明這一點。 – 2009-10-14 11:57:16

+0

感謝您的建議。我嘗試添加「if(trim($ value2)!= trim($ value))」,我仍然在看「Apple顯然不等於Apple」。 – gomezuk 2009-10-14 11:57:32

+0

另一方面,我上面發佈的代碼會更快,因爲您不會爲$ company_array的每次迭代對$ value執行第一次修剪。 – 2009-10-14 12:04:14

9

嘗試的var_dump()而不是回聲。

echo 'APPARENTLY '.$value2.' does not equal '.$value; 
echo '<pre>Debug: '; 
echo 'value='; var_dump($value); 
echo 'value2='; var_dump($value2); 
echo '</pre>'; 

它提供了附加信息。例如。實際的類型。和絃的長度。

+1

使用var_dump時特別有用的是確保你已經安裝了xdebug,因爲它會增加輸出(使用傳統的echo或者禁止print_r的東西可能很難讀取)。 – 2009-10-14 15:34:27

2

嘗試trim()對於任何空白區域以及var_dump()查看是否有任何其他內容正在傳遞。

3

嘗試檢查兩個字符串比較的編碼。

也許它是utf8相比iso-5589-1與一些奇怪的字符。