2016-12-16 1 views
-1

이 코드의 잘못된 점은 무엇입니까? 나는 기능이 내장자를 사용하지 않고 공백의 수를 읽고 싶어하지만, 반환 또는 공백을 읽는 습관 : 그것은 항상 else 부분으로 무슨문자열에 공백을 읽을 수 없습니다.

$string = "can you look into this??"; 
$i = 0; 
$breakPoints = 0; 

while ($string[$i] != '' & $string[$i + 1] != '') { 
    if ($string[$i] == "" || empty($string[$i])) { 
     die("cdsd"); 
     $breakposition = $string[$i]; 
     $breakPoints++; 
    } else { 
     print_r($string[$i]); 
    } 
    $i++; 
} 

echo($breakPoints); 

과 결코 if 문으로 간다. 심지어 isset()을 사용해 보았지만 작동하지 않았습니다. 내가 실수 한 부분은 어디 있니?

+0

예상되는 결과는 무엇입니까? 그것은 :'canyoulookintothis? '? – Andreas

+2

'$ string [$ i + 1]'문제가 있습니다. 마지막'? '를 누르면'초기화되지 않은 문자열 오프셋 '오류가 발생합니다. 네가 그걸 보지 않는다 니 놀랍다. – aynber

+0

@aynber : 그리고 그들은 여전히 ​​그 대답을 받아 들였습니다. -0 – AbraCadaver

답변

-1

공간이 비어 있지, 그것은 크기를 압정으로 고정됩니다. 때문에,

사용 preg_match_all을이

$string = "can you look into this??"; 
$i = 0; 
$breakPoints = 0; 

while ($string[$i] != '' & $string[$i + 1] != '') { 

    if ($string[$i] == " ") { 
     echo " "; 
     $breakposition = $string[$i]; 
     $breakPoints++; 
    } else { 
     print_r($string[$i]); 
    }  
    $i++; 
} 

echo($breakPoints); 

DEMO

을 사용하거나이 코드를 사용해보십시오.

$matches = " "; 
$numSpaces = preg_match_all('/[ ]/', $string , $matches); 

또는이 :: 사용

substr_count($string , ' '); 
+0

_PHP Notice : 초기화되지 않은 문자열 오프셋 : 24_ – AbraCadaver

+1

어리석은 실수입니다. 감사합니다. 빌드 함수에서 사용할 수 없습니다. inbuild 함수를 사용하지 않고 빈 공간을 읽을 수있는 더 좋은 방법이 있습니까 ** –

+0

왜 오류가있는 대답을 수락합니까? https://eval.in/699198 – AbraCadaver

3

문자열 오프셋이 isset() 인 동안 루프를 반복하고 공백과 같은지 확인하십시오. 필요가 $i+1으로 아무것도 할 수 없습니다 :

$string = "can you look into this??"; 
$i = 0; 
$breakPoints = 0; 

while (isset($string[$i])) { 
    if ($string[$i] == " ") { 
     $breakposition = $string[$i]; 
     $breakPoints++; 
    } else { 
     print_r($string[$i]); 
    } 
    $i++; 
} 
echo($breakPoints); 

이 출력 :

canyoulookintothis??4 
0

당신은 당신의 코드 권리를 가지고 후에는 항상 문자열 인덱스 오류로 실행하고 확인하는 기능을 내장는 isset()를해야합니다 조작을 수행하기 전에. 즉, 색인의 i는 결국 문자열의 마지막 문자를 넘어 서게됩니다. 그러면 PHP 오류가 발생합니다. isset()을 사용하여이를 확인하고 루프에서 빠져 나올 수 있습니다. 예 :

$string = "can you look into this??"; 
$i = 0; 
$breakPoints = 0; 

while (isset($string[$i])) { 
    if ($string[$i] == " ") { 
     $breakPoints++; 
    } else { 
     if($string[$i] != ''){ 
      print_r($string[$i]); 
     } 
    } 
    $i++; 
} 
echo("<br />Number of spaces: ".$breakPoints