如何解决这个简单的PHP for循环问题?

时间:2011-01-02 21:47:07

标签: php

以下是我的平面文件数据库的内容:

Jacob | Little | 22 | Male | Web Developer *
Adam | Johnson | 45 | Male | President *

这是我的php代码:

<?php

$fopen = fopen('db.txt', 'r');

if (!$fopen) { echo 'File not found'; }

$fread = fread($fopen, filesize('db.txt'));

$records = explode('|', $fread);

?>

<table border="1" width="100%">
    <tr>
        <thead>
            <th>First Name</th>
            <th>Last Name</th>
            <th>Age</th>
            <th>Sex</th>
            <th>Occupation</th>
        </thead>
    </tr>
    <?php

    $rows = explode('*', $fread);
    for($i = 0; $i < count($rows) - 1; $i++)
    {

        echo '<tr>';
        echo '<td>'.$records[0].'</td>';
        echo '<td>'.$records[1].'</td>';
        echo '<td>'.$records[2].'</td>';
        echo '<td>'.$records[3].'</td>';
        echo '<td>'.$records[4].'</td>';
        echo '</tr>';
    }

    fclose($fopen);

    ?>
</table>

问题是我得到第一条记录的输出重复两次而不是两条记录,一条用于雅各布,一条用于亚当。如何解决这个问题?

4 个答案:

答案 0 :(得分:0)

我没有在循环中看到for循环变量$i?错字?

答案 1 :(得分:0)

您输出两次相同的记录数组。

$records不会改变

你正在倒退,首先拆开行,然后在爆炸的行上行走。

离。

$rows = explode('*',$fread);

foreach($rows as $row) {
    //print each row
    $row_array = explode('|', $row);

    $row_array[0];
    $row_array[1];
    //... etc.
}

答案 2 :(得分:0)

在循环中取出|爆炸:
    

$rows = explode('*', $fread);
for($i = 0; $i < count($rows) - 1; $i++)
{
    $records = explode('|', $rows[$i]);

    echo '<tr>';
    echo '<td>'.$records[0].'</td>';
    echo '<td>'.$records[1].'</td>';
    echo '<td>'.$records[2].'</td>';
    echo '<td>'.$records[3].'</td>';
    echo '<td>'.$records[4].'</td>';
    echo '</tr>';
}

更好地将for循环重写为:

foreach($rows as $row) {
{
    $records = explode('|', $row);

    echo '<tr>';
    echo '<td>'.$records[0].'</td>';
    echo '<td>'.$records[1].'</td>';
    echo '<td>'.$records[2].'</td>';
    echo '<td>'.$records[3].'</td>';
    echo '<td>'.$records[4].'</td>';
    echo '</tr>';
}

答案 3 :(得分:0)

这种情况正在发生,因为您通过调用explode来分割整个文件的内容; $records将如下所示:

Array
(
    [0] => Jacob 
    [1] =>  Little 
    [2] =>  22 
    [3] =>  Male 
    [4] =>  Web Developer *
Adam 
    [5] =>  Johnson 
    [6] =>  45 
    [7] =>  Male 
    [8] =>  President *
)

因此,在循环的每个迭代中,您只需在此数组中打印元素0-4。你应该做的是将文件分成行,然后单独爆炸每行。最简单的方法是使用file函数:

$lines = file('db.txt', FILE_IGNORE_NEW_LINES);
foreach ($lines as $line)
{
    $record = explode('|', $line);

    // Display the record info.
}

此处,FILE_IGNORE_NEW_LINES告诉file不要在每个数组元素中包含新行字符。这样,您不再需要每条记录末尾的*(我认为是在那里划分记录)。