2011-02-07 5 views
1

저는 PHP로 코딩하기가 비교적 쉽습니다. 몇 가지 다른 언어에 익숙해 졌기 때문에 조금 바보짓을하기로했습니다.PHP 변수가 같지 않음

기본적으로 저는 정규 표현식과 웹 스크래핑으로 놀았으며 스크립트를 사용하여 사이트의 일부 정보를 구문 분석합니다. 정보를 잘 얻고 있지만 배열 중 하나의 값을 문자열과 비교하려고하면 값이 동일하고 동일한 데이터 형식 임에도 불구하고 동등하지 않습니다. 여기 내가 함께 일하는 것을 보여주는 예가있다.

여기 사이트에서 값 집합을 검색 한 다음 1 차원 배열로 이동하여 값을 비교하려고합니다. array [0] = "Value"의 값을 가정하면 $ str과 같아야합니다. gettype()을 사용하여 검사했고 $ tmp와 $ str이 모두 문자열이지만 아직 동등한 것으로 등록하지 않았습니다. 나는 또한 내 배열에 current() 값을 시도했다. (실제로는 내 목적에 더 좋을 것이다.)하지만 동일하다.

실제로해야 할 일은 배열에서 값을 찾아 $ str과 비교하는 것입니다. 일치하는 경우 변수를 배열의 이전 값으로 설정해야합니다. 에 대한 필요도 없기 때문에

$html = file_get_contents("http://www.site.com");  
$str = "Value"; 

preg_match_all ('/<td class=\"name\">(.*?)<\/td>/s', $html, $return, PREG_PATTERN_ORDER); 

      for ($ii = 0; $ii < count($return[0]); $ii++) { 
       $array[$ii] = $return[0][$ii]; 
      } 


      $tmp = $array[0]; 

      if ($tmp == $str) { 
       echo "yes"; 
      } 
+0

trimmimg $ tmp trim ($ tmp)을 시도해 볼 수 있습니다. 거기에 줄 바꿈 문자가있을 수 있습니다 ... 거기에 htmlentitied가있을 수도 있습니다 (rightclick> 소스보기 및 $ tmp 대 $ str보기) –

+0

루프에서 완료해야합니까? 그리고 "배열에서 이전 값으로 변수를 설정해야합니다"라는 의미는 무엇입니까? – Nabab

+0

비교할 내용과 앞뒤 공백이 있는지 보려면'$ tmp '=='$ str ' ";'if ($ tmp == $ str) {'를 추가하십시오. – xzyfer

답변

1

결과 처리가 약간 꺼져 있습니다.

preg_match_all ('#<td class="name">(.*?)</td>#s', $html, $return); 

당신은 $return[1](.*?) 일치를 얻을 것이다. 그리고 당신은 그것을 반복 할 필요가 없습니다.

$array = $return[1]; 

을 그리고 당신은 아마, 결과 목록에서 바로 첫번째 모든 항목을 비교하려면 : : 그냥 사용

foreach ($array as $i=>$tmp) { 
    if ($tmp == $str) { 
      echo "yes"; 
    } 
} 

후 이전 값을 얻으려면, 간단하게 액세스 $array[$i-1] ((?) 위의 echo 대신).

+0

감사. 내가 배열 값에 액세스하는 방법을 시도했지만 "정의되지 않은 오프셋"오류가 발생했습니다. 그래서 current() 및 prev() 메서드를 살펴 보았습니다. – jb11

+0

@ jb11 : 어느 쪽이 '-1'을 의미하고 당신의 가정이 틀릴 수도 있습니다. 비교 값은 첫 번째 테이블 셀에 있으며 앞의 테이블 셀은 없습니다. 질문을 명확히하기 위해 데이터 표의 예를 보여 주어야합니다. – mario

+0

위의 배열을 채울 때 array [index]를 사용하여 값에 직접 액세스 할 수 있습니다. 배열이 채워지는 것을 알고 있지만 for 루프를 사용하고 배열 변수 [$ i]와 문자열 변수를 비교할 때 배열에 새 변수를 설정하려고하면 오류가 발생합니다. – jb11

1

$tmp 항상 사용하는 코드의 <td...>...</td> 태그를 포함합니다, 당신은 아마

for ($ii = 0; $ii < count($return[0]); $ii++) { 
    //Matches of whole pattern (not just 1st group) 
    $array[$ii] = $return[0][$ii]; 
} 

$array=$return[1]; //array of matches of the 1st group 

로 교체 할 -loop ...

+0

정보 주셔서 감사합니다, 그것은 약간의 코드를 단순화합니다. – jb11

+0

또한 버그를 수정해야합니다 : P – tobyodavies

관련 문제