2012-11-13 5 views
0

의 내가 작은 배열()을했습니다 가정 해 봅시다? 오프셋으로 단순히 내가 공을 넣어 ...

$dataLen = sizeof($array); 
$results = array(); 

for ($i = 0; $i < $dataLen && count($array) < 10; $i++) { 
    if (stripos($array[$i], 'r', 0)) { // 

     array_push($results, $array[$i]); 
    } 
} 

print_r($results); // Output : Array ([0] => Paris [1] => Paris [2] => Ptdr) 

내가 이해할 수없는 'R'문자로 시작하는 모든 단어를 얻을 수 있지만, 그것은 나에게 P 문자로 것을 시작하는 단어를 제공합니다 "포함" R 편지.

+1

당신은 "0 오프셋에서 검색을 시작"하기를 요구하고,하지 "다음에 0을 상쇄 검색을 중지". 'in_array ($ array [$ i] [0], array ('R', 'r'))'대신에 시도해보십시오. – DCoder

+0

@DCoder 예, 인터넷에서 이것을 보았습니다. 하지만 왜 === 0이 거짓이라고 생각하지 않습니까? 왜 함수 외부에 놓아야합니까? 이걸 설명해 주시겠습니까? 대답을 수락하겠습니다. – Ydhem

답변

3

기본값은 0이므로이 값은 동일합니다. 이다

stripos($array[$i], 'r', 0) 
stripos($array[$i], 'r') // Same 

, 그들은 위치 0에서 시작하여 문자 r 또는 R를 찾아보십시오. 위치 0에 있지 않으면 두 번째 문자, 세 번째 문자 등을 검사합니다.

Stripos는 찾은 문자의 위치를 ​​반환합니다. 의 경우 파리에 대해 2를 반환합니다. Rlolo은 0을 반환합니다. 발견되지 않으면 false를 반환합니다.

기본적으로 0과 false는 모두 false로 해석됩니다. 첫 번째 문자가 R이면 stripos은 0을 반환하고 if 문은 실행되지 않습니다. 당신이 아니라 이후의 문자 바로 첫 글자를 확인하려면이 같은 일을 할 수

if (stripos($array[$i], 'r') !== false) { ... } 

:

$word = $array[$i]; 
$firstLetter = $word[0]; 
if ($firstLetter == 'r' || $firstLetter == 'R') { ... } 
+2

또는 단순히'stripos ($ array [$ i], 'r') === 0' – Yoshi

+0

간단하고 간단합니다! 고마워요! – Ydhem

+0

@ Yoshi : 아마도 첫 번째 심볼을 직접 확인하는 것보다 속도가 느릴 것입니다. 의미심장하지는 않지만 여전히 그렇습니다. – DCoder

1

또 다른 방법은 사용하는 것입니다 array_filter이 문제를 해결하려면이 코드를 사용 콜백.

$results = array_filter($array, function($var) { 
    return strtolower($var[0]) == 'r'; 
}); 

는 (물론 당신은 또한 return stripos($var, 'r') === 0;을 사용할 수 있습니다)

+0

고맙습니다. – Ydhem