идти строка за строкой и цикл? - PullRequest
1 голос
/ 29 марта 2011

Мне не очень хорошо с php, я буду честен.Некоторое время назад у меня был фрагмент кода, который на самом деле работает, но он рандомизирует текст вместо того, чтобы делать строку за строкой за раз.Мне нужно, чтобы он был сбалансирован при вращении.Вот что у меня есть:

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

Тогда я могу отображать $ randomized по мере необходимости по всей моей странице.Но, как я уже сказал, моя проблема в том, что я НЕ хочу, чтобы это было случайно, а построчно, бесконечно.Есть мысли по этому поводу?

Ответы [ 4 ]

2 голосов
/ 29 марта 2011

Использовать итераторы из 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, очевидно, вам придется определить собственный класс итератора, чтобы использовать этот метод.

1 голос
/ 29 марта 2011

Если у вас нет SPL, вы можете сделать это:

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


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

Будет работать более 2 миллиардов итераций.

0 голосов
/ 29 марта 2011
<?php
$test = file('test.txt');
for ($i = 0; $i < count($test); $i++) {
        echo $test[$i];
        if ($i == (count($test)-1)) {
                $i = -1;
        }
}
?>
0 голосов
/ 29 марта 2011

Вы можете использовать цикл 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
}
...