İki aynı dizeleri karşılaştırma PHP döndürür false

5 Cevap php

Bu tamamen benim dışındadır. Ben iki dizeleri karşılaştırmak için çalışıyorum. Onları echo, onlar özdeş gibi görünürler, ama ben '==' operatörü ile bunları karşılaştırmak, yanlış döndürür. Örneğin, benim veritabanında aşağıdaki kodu çalıştırırken. Bu "Görünüşe göre Apple Apple eşit değil" gibi şeyler verir. Herkes bu konuda herhangi bir ışık tutabilir?

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

5 Cevap

Ben Olafur katılıyorum. Ben Döşeme kaldırıldı ve nedeniyle size $ değer varsayarak ve $ value2 companyIDs olduğu gerçeğini bir preg_replace ile değiştirilir. Şirket kimliği alfanümerik olması gerekiyordu eğer bu hızlı bir değişiklik yapabilir, vb tire içerir .. Bu sürüm yapmak gerekir:

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

Yerine yankı var_dump () deneyin.

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

Bu ek bilgi sağlar. Örneğin gerçek türü. Ve dizeleri uzunluğu.

Her iki dizenin kodlama karşılaştırıldığında kontrol etmek için deneyin.

belki iso-5589-1, bazı garip karakter ile karşılaştırıldığında utf8 olduğunu.

Dizeleri görmüyorsun herhangi bir ekstra boşluk var mı? Onları kırpma deneyin.

trim() herhangi bir beyaz boşluk yanı sıra başka bir şey onunla geçirilen ise var_dump() görmeye çalışın.