2016-10-24 3 views
0

나는 PHP에 익숙하지 않고 제 첫 번째 언어입니다. 그래서 내 질문은 매우 기본적인 것 같습니다.명시 적 증가/카운터 (기본)가없는 루프 while

먼저 while 루프의 기본 개념이 나에게 꽤 분명해 보입니다. "크래시 조건"(i < 10)이 참이 될 때까지 i 증분 (i ++)하는 한.

하지만 실제로 명시적인 증분없이 다음 코드 예제가 작동하는지 궁금합니다.

$originals = "originale"; 
$thumbnails="thumbnails"; 
$directory = opendir($originale); 
$images = array(); 
while(($file = readdir($directory)) !== false) { 
    if(preg_match("/\.jp?g$/i", $file)){ 
     $images[] = $file; 
    } 
} 
echo "<pre>"; 
var_dump($images); 
echo "</pre>"; 
closedir($directory); 

분명히 나는 ​​뭔가를 놓쳤다. 그것은 마술처럼 보입니다. 첫 번째 파일을 반환하는 무한 루프가 필요할 것입니다 ...?

내 영어에도 불구하고 (유감스럽게도) 질문이 분명해지기를 바랍니다. 미리 감사드립니다.

+2

'while'-loops run * while * 중괄호 안의 조건이 참입니다. 이 경우 조건은'($ file = readdir ($ directory))'이다.이 파일은 디렉토리에서 $ file에 새로운 파일 이름을 할당하려고 시도하며, 전체적으로는 새로운 파일이 없다면 false를 반환한다. **하지만 : ** 기본 코드에 대한 설명은 SO에 대한 주제를 벗어났습니다. - 튜토리얼 사이트가 아닙니다. [원하는 검색 엔진]은 사용자의 요구에 더 잘 맞는 몇 가지 기능을 제공합니다. –

+1

while 루프는 증분 값을 가질 필요가 없기 때문에 루프를 깨는 _something_이있는 한이 경우에는'$ file'이 false로 설정됩니다. – Epodax

+1

readdir은 포인터를 앞으로 이동시키고 포인터가 디렉토리의 끝에 도달하면 false를 반환합니다. –

답변

2

당신이 PHP documentationreaddir에서 볼 수 있듯이 수행합니다

디렉토리에서 다음 항목의 이름을 돌려줍니다. 항목은 파일 시스템이 저장 한 순서대로 리턴됩니다.

그래서 readdir을 호출 할 때마다 해당 디렉토리에서 다음 파일을 반환합니다. 예를 들어

당신이이 개 파일이있는 direcotry있는 경우 :

  • one.txt
  • two.txt

당신이 readdir 전화를 처음 one.txt를 반환됩니다. 그리고 이것은 너무 two.txt 이상과 같은를 반환합니다 당신이 readdir를 호출 while

두 번째 내부의 코드를 실행합니다 false 다릅니다.

readdir으로 전화하는 시간은 더 이상 파일이 더 이상 존재하지 않으므로 false을 반환합니다. while의 조건은 더 이상 true가 아니며 더 이상 입력하지 않습니다.

+0

감사합니다! 설명서를 읽었지만 그 다리를 건너 갈 수 없었습니다. 당신이 나에게 그럴듯한 문맥을주었습니다. 나는 여러 번 비슷한 개념에 직면했다. 이제 그 점에 훨씬 더 가까이 다 가설 것 같습니다. –