【问题标题】:go line by line and loop?逐行循环?
【发布时间】:2011-03-29 17:31:16
【问题描述】:

说实话,我不擅长 php。不久前我有一段代码,现在实际上可以工作,但它随机化了文本,而不是一次一行一行地执行。我需要它在旋转时保持平衡。这是我所拥有的:

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

然后我可以根据需要在整个页面中回显 $randomized。但就像我说的那样,我的问题是我不希望它是随机的,而是按顺序逐行循环,无休止地循环。对此有什么想法吗??

【问题讨论】:

  • 您希望何时更改值?在每个页面加载?

标签: php text echo


【解决方案1】:

使用 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,显然您必须定义自己的迭代器类才能使用此方法。

【讨论】:

    【解决方案2】:

    如果您没有 SPL,您可以这样做:

    $test = file('my_txt_file.txt');
    $test_counter = 0;
    
    
    // Whenever you want to output a line:
    echo $test[$test_counter++ % count($test)];
    

    将工作超过 20 亿次迭代。

    【讨论】:

    • 我的答案的好选择!
    • @Matt - 会作为评论添加到您的答案中,除了 cmets 的格式太有限。
    【解决方案3】:

    你可以使用 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
    }
    

    【讨论】:

      【解决方案4】:
      <?php
      $test = file('test.txt');
      for ($i = 0; $i < count($test); $i++) {
              echo $test[$i];
              if ($i == (count($test)-1)) {
                      $i = -1;
              }
      }
      ?>
      

      【讨论】:

      • 很高兴重复答案:-p(我确定你不是故意的^_^)
      猜你喜欢
      • 2013-08-17
      • 2018-11-29
      • 2020-12-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-07-07
      • 2012-01-24
      相关资源
      最近更新 更多