2011-03-29 9 views
1

나는 PHP가 좋지 않다. 나는 솔직해질 것이다. 지금 당장은 실제로 작동하지만, 한 번에 한 줄씩 줄을 바꾸는 대신 텍스트를 무작위로 추출합니다. 회전 할 때 균형을 유지해야합니다. 여기에 내가 무엇을 가지고 :줄 단위로 이동하고 반복 하시겠습니까?

$test = file('my_txt_file.txt'); 
$randomized = $test[ mt_rand(0, count($test) - 1) ]; 

가 그럼 난 내 페이지를 통해 필요에 따라 무작위 $ 에코 수 있습니다. 하지만 내가 말했듯이 내 문제는 내가 무작위로 원하는 것은 아니지만 순서대로 라인별로 끝없이 반복된다. 이것에 대한 어떤 생각 ??

+0

언제 값을 변경 하시겠습니까? 각 페이지에로드? – salathe

답변

0

당신이 for 루프 사용할 수 있습니다

for($i = 0; $i < count($test); $i++){ 
    echo $test[$i]; //display the line 
    if(($i + 1) >= count($test)) $i = -1; //makes the loop infinite 
    //if you don't want it to be infinite remove the above line 
} 
2

사용 반복자를 SPL에서 : http://us.php.net/manual/en/class.infiniteiterator.php

$test = file('my_txt_file.txt'); 
// this allows you to loop endlessly (vs. ArrayIterator) 
$lineIterator = new InfiniteIterator($test); 

// ... 
// Later where you want to use the current line 
echo $lineIterator->current(); 
$lineIterator->next(); // prepare for next call 

이 방법의하자 당신이 임의의 명시 적 목록을하지 않고 배열에 액세스 할 수 있습니다. 따라서 에코 라인 (또는 일부 변형)을 어디서든 작성할 수 있습니다. 귀하의 질문에 대한 이해에서 for 루프보다 낫다.

SPL이없는 경우이 메서드를 사용하려면 고유 한 반복기 클래스를 정의해야합니다. 당신은 SPL이없는 경우

0
<?php 
$test = file('test.txt'); 
for ($i = 0; $i < count($test); $i++) { 
     echo $test[$i]; 
     if ($i == (count($test)-1)) { 
       $i = -1; 
     } 
} 
?> 
+0

멋진 답변 반복 : - P는 (메신저 확실 해요^_ ^) – Neal

+0

@ Neal, 위대한 마음 ... – Jordan

1

, 당신이 할 수 있습니다 :

$test = file('my_txt_file.txt'); 
$test_counter = 0; 


// Whenever you want to output a line: 
echo $test[$test_counter++ % count($test)]; 

이 20 억 이상 반복을 위해 작동합니다.

+0

내 대답 좋은 대안! – Matt

+0

@Matt - 의견 형식이 너무 제한적이라는 점을 제외하면 답변에 주석으로 추가했을 것입니다. –

관련 문제