2013-02-03 4 views
-2

나는 이것이 아마도 나무의 숲이라는 질문 중 하나라는 것을 알고 있지만, 나는 하루 종일 여기 앉아 있었고, 나는 어디서 잘못되고 있는지 보지 못한다.동일한 문자열에 대해서도 항상 문자열 비교가 false를 반환하는 이유는 무엇입니까?

시나리오 : 기본적으로

내가 쿼리과 같이 주소 결과 다음과 같은 ASSOC 배열을 반환 있습니다

Array ([0] => Array ([Address_ID] => 12 [Address_String] => 23 Abledone road Hobs moat Solihull West Midlands B92 4JJ) [1] => Array ([Address_ID] => 13 [Address_String] => 22 Holdean Road Deepcut Surrey KT164NJ) [2] => Array ([Address_ID] => 14 [Address_String] => 32 Palbrough Road Nottingham N32 4NJ) [3] => Array ([Address_ID] => 15 [Address_String] => Flat 2B Gateway House Rutland Street Bearwood Westmidlands B66 9RT) [4] => Array ([Address_ID] => 16 [Address_String] => 258 Lincoln Street Bullworth Street Dundee DD35 9RJ) [5] => Array ([Address_ID] => 17 [Address_String] => 4 Scott Arms Avenue Beckton Hartfordshire H32 7JJ) [6] => Array ([Address_ID] => 18 [Address_String] => 14 Fairfield house Millbank road Bearwood Birmingham Westmidlands B137JJ) [7] => Array ([Address_ID] => 19 [Address_String] => 9 Scott road Olton Solihull Westmidlands B91 7TY) [8] => Array ([Address_ID] => 20 [Address_String] => Normandy House Bunnian Place Basingstoke RG21 7EJ) [9] => Array ([Address_ID] => 27 [Address_String] => 3 New Square Bedfont Lakes Feltham Middlesex TW14 8HB) [10] => Array ([Address_ID] => 28 [Address_String] => No. 1 The Square Temple Quay Bristol BS1 6DG) [11] => Array ([Address_ID] => 29 [Address_String] => The Visual Space Capital Park Fulbourn Cambridge CB21 5XH) [12] => Array ([Address_ID] => 40 [Address_String] => 21 St. Andrew Square Edinburgh Scotland CB21 5XH)) 

을 내가 할 노력하고있어 모든 검색 문자열에 대한 결과와 일치하는 것이다 주소가 이미 내 데이터베이스에 있는지 확인합니다.

public function addressExistsByString ($searchAddrString, $asJSON = FALSE) { 
    if (!isset($searchAddrString)) { 
     throw new Exception('The searchAddrString variable of function ' . __FUNCTION__ . ' of class ' . __CLASS__ . 'was empty or set to NULL.'); 
    } elseif (!is_string($searchAddrString)) { 
     throw new Exception('The type of value for the argument addressID of function ' . __FUNCTION__ . ' of class ' . __CLASS__ . ' was ' . gettype($searchAddrString) . ' a string was expected'); 
    }if (!is_bool($asJSON)) { 
     $asJSON = FALSE; 
    } 

    print_r ($addressArray = $this->getAllLocations(FALSE)); 

    if ($addressArray === -1) { 
     return -2; 
    } else { 

     $search = str_replace(',','', strtolower(trim($searchAddrString))); 

     foreach ($addressArray as $record) { 

      $recID = $record ['Address_ID']; 
      $currentAddress =str_replace(',','', strtolower(trim($record['Address_String']))); 

      echo 'Search address: '. $search. ' Current address: '. $currentAddress .' type of current address: '.gettype($searchAddrString).'<br/>'; 

      if ($currentAddress === $search) { 

       if ($asJSON) { 
        echo json_encode($recID); 
       } 
       return intval($recID); 
      } 
     } 
     if ($asJSON) { 
      echo json_encode(-1); 
     } 
     return -1; 
    } 
} 

나는 다음과 같은 출력을 얻을이 코드를 실행 (미안의 조금 긴하지만 중요한 비트가 강조 표시) :

bunnian 장소 베이 싱 스토크을 다음과 같이

내 코드입니다 rg21 7ej 현재 주소 : 23 abledone 도로 호브 해자 solihull 서쪽 ​​midlands b92 4jj 현재 주소 유형 : 문자열 검색 주소 : normandy 집 bunnian 장소 basingstoke rg21 7ej 현재 주소 : 22 holdean 도로 deepcut surrey kt164nj 현재 주소 유형 : 문자열 주소 검색 : normandy house bunnian 장소 basingstoke rg21 7ej 현재 주소 : 32 palbrough road nottingham n32 4nj 현재 주소 유형 : 문자열 주소 검색 : normandy house bunnian 장소 basingstoke rg21 7ej 현재 주소 : flat 2b 게이트웨이 하우스 rutland 거리 bearwood westmidlands b66 9rt 현재 주소의 유형 : 문자열 검색 주소 : normandy 집 bunnian 장소 basingstoke rg21 7ej 현재 주소 : 258 lincoln 거리 bullworth 거리 dundee dd35 9rj 현재 주소 유형 : 문자열 검색 주소 : normandy 집 bunnian 장소 basingstoke rg21 7ej 현재 주소 : 4 scott 무기 번가 beckton hartfordshire h32 7jj 현주소 유형 : 문자열 검색 주소 : normandy 집 bunnian 장소 basingstoke rg21 7ej 현재 주소 : 14 fairfield house millbank road bearwood 버밍엄 westmidlands b137jj 현주소 유형 : 문자열,검색 주소 : 노르망디의 집 bunnian 장소 베이 싱 스토크 rg21 7ej 현재 주소 : 9 스캇 도로 현재 주소의 olton 솔리 헐 웨스트 미들 랜즈 주 B91의 7ty 유형 : 문자열 검색 주소 : 노르망디 집 bunnian 장소 베이 싱 스토크의 rg21의 7ej 현재 주소 : 노르망디 집 bunnian 장소 베이 싱 스토크 rg21 7ej 현재 주소 유형 : 문자열 검색 주소 : normandy 집 bunnian 장소 basingstoke rg21 7ej 현재 주소 : 3 new square bedfont lakes feltham middlesex tw14 8hb 현재 주소 유형 : 문자열 주소 검색 : normandy house bunnian place basingstoke rg21 7ej 현재 주소 : 아니요. 1 square temple quay bristol bs1 6dg 현재 주소 유형 : 문자열 검색 주소 : normandy 집 bunnian 장소 basingstoke rg21 7ej 현재 주소 : visual space capital park fulbourn 캠브리지 cb21 5xh 현재 주소 유형 : 문자열 주소 검색 : normandy house bunnian 장소 basingstoke rg21 7ej 현재 주소 : 21 st. 현재 주소의 앤드류 광장에 딘 버 러 스코틀랜드 CB21 5xh 유형 : -1

강조 문자열이 정확히 동일한 문자열, 나는 그들 모두를 복용하고 문 일반 문자열로하고 경우 별도의 그들을 고집하여 그들을 테스트했습니다 true가 항상 리턴됩니다. 나는 ==, === 캐스팅, 문자열 값과 내가 생각할 수있는 모든 것을 시도했지만, 어떤 이유로 -1이 항상 리턴된다. 나는 그것의 아마 무언가 아주 간단한 Im를 알고있다 그러나 나는 그것을 다만 볼 수 없다, 누군가는 도울 수 있는가?

미리 감사드립니다.

+1

str-length를 확인하거나 디버거에 넣거나'[] '안에 기록하여 여분의 공백을 검사하십시오. – SparKot

+1

중요한 비트를 분리하여 자신의 전체 프로그램에 넣을 수는 없습니까? 대다수의 질문은이 질문과 관련이 없습니다. –

+0

1) 'var_dump'는 우리에게 중요한 물건입니다. 2) 합법적으로 게시 할 수없는 정보 (영국 주소이므로 데이터 보호법에 의거 함)를 비롯하여 불필요한 많은 것들을 게시하는 이유는 무엇입니까? 3) 누락 된 줄 끝 또는 인쇄 할 수없는 문자가 있는지 확인하십시오. – Amelia

답변

1

var_dump() 두 변수를 비교하기 직전입니다. 이 전에 <pre> 태그를 반향하면 HTML 소스 코드로 전환 할 필요없이 브라우저의 모든 공백을 볼 수 있습니다.

일부 공백 문자가 누락 될 가능성이 큽니다.

+0

Sven은 핵심적인 대답을 가지고 있다고 생각합니다. 나는 똑같은 문제를 겪고 있고, var_dump를했고, 놀랍게도 내가 믿었던 것처럼 두 개의 객체를 비교하고 있다는 것을 발견했습니다. 이 게시물을 참조하십시오. http://stackoverflow.com/questions/2867575/get-value-from-simplexmlelement-object XML을 사용하지 않지만 JSON이 혼합되어 사용하는 것으로 알고 있습니다. 또한, 당신은 트리플이 같음을 사용하고있는 것을 볼 수 있습니다. 즉, 평등하면 true를 반환하고 같은 유형입니다. 한 변수가 문자열이고 다른 변수가 다른 것이라면주의하십시오. –

관련 문제