2013-06-01 2 views
0

단어가 텍스트 문자열 내에 존재하는지 여부를 결정하려고 시도하는 중, 해당 단어가 있으면 해당 문자열을 인쇄하십시오. 이 코드가 일부 사용자에게는 작동하지만 모든 사용자에게는 작동하지 않는 것으로 보입니다.strpos를 올바르게 사용하고 있습니까?

$active = $db->query("SELECT * FROM activity ORDER BY aTIME DESC LIMIT 15"); 

while($activity = $db->fetch_row($active)) 
{ 
    $haveact = $activity['activity']; 
    $username = $r['username']; 
    if(strpos($haveact, $username)) 
    { 
     print " <div class='activitydiv'> 
       {$activity['activity']} &nbsp&nbsp&nbsp&nbsp<small><font color='grey'> 
       {$activity['aTIME']}</font></small> 
       </div>"; 
    } 
} 
+0

수동 -> http://php.net/manual/en/function.strpos.php – BeNdErR

+0

루이스, 아직 대답을 얻었다?그렇지 않으면 의견 필드에 피드백을 남기십시오. downvoting하는 경우 의견 필드에 이유를 알려주십시오. –

답변

1

strpos은 발견 된 텍스트의 위치를 ​​반환합니다. 예를 들어, 찾고있는 단어가 문자열의 시작 부분에있을 때 함수는 '0'을 반환합니다. 0이 거짓 값이라는 것을 감안할 때, 단어가 발견 되더라도 당신이했던 것처럼 함수를 사용할 때 그것은 사실이 아닐 것입니다. strpos의 올바른 사용법은 다음과 같습니다.

if (strpos($haystack, $needle) !== false) // Note the type check. 
{ 
    // your code... 
} 

또한이 함수는 기본적으로 대소 문자를 구분합니다. 대/소문자를 구분하지 않고 검색하려면 stripos을 사용할 수 있습니다.

매뉴얼에서 편집

:

This function may return Boolean FALSE, but may also return a non-Boolean value which evaluates to FALSE 

더 잘 이해하기 위해 다음 예를 확인 : 바늘이 발견되지 않는 경우

strpos('the quick brown fox jumps over the lazy dog', 'the'); // Returns 0 (false value) 
strpos('the quick brown fox jumps over the lazy dog', 'quick'); // Returns 4 (true value) 
strpos('the quick brown fox jumps over the lazy dog', 'THE'); // Returns false (case sensitive) 
-1

strpos()가 부울 FALSE를 반환; 문자열에 오프셋이있는 경우 정수 값입니다. 오프셋은 0 일 수 있습니다. 이는 느슨한 비교에서 부울 FALSE와 같습니다.

사용

if(strpos($haveact, $username) !== FALSE) 
-1

strpos 반환 할 수있는 사용되고 있습니다 있습니다 기본적으로 당신이

strpos($haveact,$username) !== FALSE

2

같은 타입과 값을 확인하는 데 필요한 같은 "값"

은 0 및 FALSE 다른 답변에서 제안 된 것 외에도 쿼리에서 문자열 검색을 수행하기 위해 전체 코드를 다시 작성합니다. 당신이 PHP의는 preg_match 기능을 시도 할 수있는 대안으로 :

if (strpos($haveact, $username) !== false) { 
    // In string. 
} 
-1

또 다른 옵션, 나는 일반적으로 사용 :이 같은 예를 들어

if (preg_match("/{$to_search}/" , $subject)) { 
    // your code to process 
} 
+0

누군가 downvote 버튼에 bazooka를 사용했습니다 : D –

-1

짧은 때문에

<?php 

$active = $db->query("SELECT * FROM (SELECT * FROM activity 
         ORDER BY aTIME DESC LIMIT 15) 
         WHERE activity LIKE \"%" . $db->escape($r['username']) . "%\";"); 

while($activity=$db->fetch_row($active)) 
{ 
    print "<div class='activitydiv'> 
       {$activity['activity']} &nbsp&nbsp&nbsp&nbsp<small><font color='grey'> 
       {$activity['aTIME']}</font></small> 
      </div>"; 
} 

?> 
+0

하지만 당신이 찾고있는 것을 알고있을 때 (정규 표현식의 추가 된 힘이 필요하지 않을 때)'strpos'가 더 빠릅니다. – Arjan

0

처럼 Hauke ​​P 언급했다 - PHP로 이것을하지 마십시오. 당신은 데이터베이스와 일치하는 행을 필터링하고 싶습니다. 더 많은 전력이 필요하기 때문에 WHERE row LIKE %foo%을 사용하지 않으려는 경우 MYSQL에 REGEX을 사용할 수도 있습니다. PHP로 데이터를 처리하지 마십시오. 그렇게하면 설계가 실패합니다.

LIKE, SELECT 및 REGEX에 대한 MySQL 도움말 파일을 확인하십시오.

힌트 : 여기 strpos에 대한 http://www.mysql.com/

관련 문제