以下是我的平面文件数据库的内容:
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>
问题是我得到第一条记录的输出重复两次而不是两条记录,一条用于雅各布,一条用于亚当。如何解决这个问题?
答案 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
不要在每个数组元素中包含新行字符。这样,您不再需要每条记录末尾的*
(我认为是在那里划分记录)。