从序列中回显下一个数组值

时间:2017-02-09 07:51:02

标签: php

所以我有一个名为payout_dates.txt的文件,该文件与此非常相似;

01/01/17
01/02/17
01/03/17
...

下面我使用while函数遍历文档的每一行并将它们显示为选择选项,我试图实现的还显示下一行的文本。例如,我使用%1$s来回显出第一个结果,所以我需要像%2$s这样的东西来回应下一个结果,给我一个像这样的预期结果;

 echo sprintf('  <option value="%1$s">%1$s to %2$s</option>'."\n", trim($dates));

导致select选项看起来像01/01/17 to 01/02/17,依旧等等。

我当前的代码

<?
    $payout_dates = fopen('/path/payout_dates.txt', 'r');
    while ($dates = fgets($payout_dates, 1024)) {
       echo sprintf('  <option value="%1$s">%1$s</option>'."\n", trim($dates));
    }
?>

4 个答案:

答案 0 :(得分:0)

这可能会有所帮助

<?php
    $payout_dates = file('/path/payout_dates.txt');

    for($i = 0; $i < count($payout_dates) - 1; $i++)
    {
        $curDate = trim($payout_dates[$i]);
        $nextDate = trim($payout_dates[$i+1]);

        echo sprintf('<option value="%1$s">%1$s to %2$s</option>'."\n", $curDate, $nextDate);
    }

结果:

<option value="01/01/17">01/01/17 to 01/02/17</option>
<option value="01/02/17">01/02/17 to 01/03/17</option>
<option value="01/03/17">01/03/17 to 01/04/17</option>
<option value="01/04/17">01/04/17 to 01/05/17</option>

答案 1 :(得分:0)

您必须在变量中保存$ dates的当前值,并在下一次迭代中回显它。

请注意,此代码将始终回显一行,而不是文件中的行。

<?php
    $payout_dates = fopen('/path/payout_dates.txt', 'r');

    $lastDate = '';
    while ($dates = fgets($payout_dates, 1024)) {
        if($lastDate = ''){
            $lastDate = trim($dates);
        } else {
            $thisDate = trim($dates);
            echo sprintf('  <option value="%1$s">%1$s to %2$s</option>'."\n", $lastDate, $thisDate);
            $lastDate = $thisDate;
        }
    }
?>

答案 2 :(得分:0)

如果您的文件不是很大(适合RAM并且仍然留有RAM进行进一步处理),那么您可以使用file()函数。

$lines = file('/path/payout_dates.txt');

foreach ($lines as $line => $content) {
     $content = trim($content); // line will contain \r\n
     $next = isset($lines[$line+1]) ? trim($lines[$line+1]) : null;
     echo "<option value='{$content}'>from {$content}".(!empty($next) ? " to {$next}" : '');
}

答案 3 :(得分:0)

我的答案与https://stackoverflow.com/a/42131113类似,但我的答案更为积极

<?php
    $payout_dates = fopen('payout_dates.txt', 'r');
    $preview = false;
    $html = '<select>';
    while ($dates = fgets($payout_dates, 1024)) {
        $html .= ($preview) 
            ? sprintf('<option value="%1$s">%1$s to %2$s</option>'."\n", trim($preview),trim($dates))
            :'';
        $preview = $dates;
    }
    echo($html.'</select>');
?>

但是https://stackoverflow.com/a/42131125/6390681很好看。