2010-02-13 3 views
4
<?php 
$string = "hey"; 

foreach(range('a','z') as $i) 
{ 
if($string == '$i') 
{ 
echo $i; 
} 
} 
?> 

왜이 기능이 작동하지 않습니까? 말해줘.PHP 알파벳 루프

+0

당신이 실제로 어떻게하려고? – meouw

+0

예, 작동하지 않습니다. 너는 알파벳의 각 문자를 "헤이"와 비교하기 때문에 아무 일도 일어나지 않는다. – Daan

답변

2
그것은하지만 때문에 아무것도 볼 수 없습니다되어

: 당신의 $ 내가 작은 따옴표로 보지 않으면

'hey' != '$i' 

'hey' != 'a'; 
'hey' != 'b'; 
'hey' != 'c'; 
... 
'hey' != 'z'; 
0

(이 값의 제작은 '$ i'를 문자 그대로) 테스트 대신 == 모양이 strspn()

22

코드에 두 가지 문제점이 있습니다.

먼저 작은 따옴표 문자열 (')은 큰 따옴표 문자열 (")과 다르게 동작합니다. 작은 따옴표 문자열을 사용하는 경우 이스케이프 시퀀스 (\'\\ 제외)는 해석되지 않고 변수가 사용되지 않습니다. 이 같이 고정 할 수 있습니다 (따옴표를 제거하거나 큰 따옴표로 변경) 등 :

$string = 'hey'; 

foreach(range('a','z') as $i) { 
    if($string == $i) { 
    echo $i; 
    } 
} 

PHP Documentation: Strings


이 두 번째로, 당신의 상태가 'hey'TRUE로 평가하지 않습니다 알파벳 하나의 문자와 결코 같지 않습니다. 문자 단어에 있는지 평가하기 위해, 당신은 strpos()를 사용할 수 있습니다

$string = 'hey'; 

foreach(range('a','z') as $i) { 
    if(strpos($string, $i) !== FALSE) { 
    echo $i; 
    } 
} 

!== FALSE0 also evaluates to FALSE이 경우 중요합니다. 즉, !== FALSE을 제거하면 첫 번째 문자가 출력되지 않습니다.

PHP Documentation: strpos()
PHP Documentation: Converting to boolean
PHP Documentation: Comparison Operators

+1

내 대답보다 훨씬 낫다. – meouw