PHP : 将数组输出到 table
PHP : outputting array into table
对于我的 PHP 项目,我需要将排序的数组打印到 table 中。我们不能使用预制的排序函数来执行此操作,而是被指示创建我们自己的排序函数。排序有效,但不会按照我们需要的方式进入 html table 格式。
<?php
$fileInput = "guestBook.txt";
$fileInputInData = file_get_contents($fileInput);
$array=explode("\n", $fileInputInData);
for($j = 0; $j < count($array); $j ++)
{
for($i = 0; $i < count($array)-1; $i ++)
{
if($array[$i] > $array[$i+1])
{
$temp = $array[$i+1];
$array[$i+1]=$array[$i];
$array[$i]=$temp;
}
}
}
echo "<th>Firstname</th><th>Lastname</th><th>Email Address</th>";
$arrayExplode = explode("\n", $array);
$k = 0;
foreach($array as $arrayOut)
{
$arrayExplodeTwo = explode(" ", $arrayExplode[$k]);
$firstName = $arrayExplodeTwo[0];
$lastName = $arrayExplodeTwo[1];
$email = $arrayExplodeTwo[2];
echo '<tr><td>'; echo $firstName; echo '</td></tr>';echo '<tr><td>';
echo $lastName; echo '</td></tr>';
echo '<tr><td>'; echo $email; echo '</td></tr>';
$k++;
}
?>
代码输出如下:
Firstname Lastname Email
代码不想将数据正确打印到 table。取出foreach循环中explode的具体分解输出成table。但是,这样做并没有将它们分解成 table 的空间,每行只有一个框,其他 2 个框为空。它将数据打印到 Firstname 列中的 table 中,每行都有数据。将数据格式化为特定的行会导致它在列中不打印任何内容,只是一个空的 table.
在将 explode 函数添加到靠近代码底部的 foreach 循环之前,我的代码是这样输出到网络浏览器的。
Firstname Lastname Email Address
Anon emous anon@email.com
Matthew rando rando@gmail.com has signed in.
Matthew rando rando@gmail.com has signed in.
Matthew rando rando@gmail.com has signed in.
Person Anon Anon@emailaddr.com has signed in.
Person AnonyMouse AnonyMouse@emailaddr.com has signed in.
Person Name randomaddr@example.com has signed in.
Test Person thispersonisatest@fake.com has signed in.
Test PersonTwo thispersonisatestTwo@fake.com has signed in.
random name randomname@example.com
test personand testPersonAnd@testemail.com has signed in.
在 foreach 循环中添加 explode 函数后,结果打印如下:
Firstname Lastname Email Address
在table期间没有数据,输出为空白table。
提前感谢您的帮助。
我对您的 guestBook.txt 文件做了一些假设,并得到了以下代码。
<?php
# Read and parse the file
$fileInput = "guestBook.txt";
$fileInputInData = file_get_contents($fileInput);
$array=explode("\n", $fileInputInData);
# Sort the data
for($j = 0; $j < count($array); $j ++)
{
for($i = 0; $i < count($array)-1; $i ++)
{
if($array[$i] > $array[$i+1])
{
$temp = $array[$i+1];
$array[$i+1]=$array[$i];
$array[$i]=$temp;
}
}
}
# Check the sort results
#var_dump($array);
# Echo the table header
echo "<tr><th>Firstname</th><th>Lastname</th><th>Email Address</th></tr>";
# Loop through each element of the sorted array
foreach($array as $arrayOut)
{
# Explode the current array element by spaces
$arrayExplode = explode(" ", $arrayOut);
# Assign the data
$firstName = $arrayExplode[0];
$lastName = $arrayExplode[1];
$email = $arrayExplode[2];
# Echo out the results
echo '<tr>';
echo ' <td>'; echo $firstName; echo '</td>';
echo ' <td>'; echo $lastName; echo '</td>';
echo ' <td>'; echo $email; echo '</td>';
echo '</tr>';
}
?>
关于您的原始代码的一些评论:
- 在你的代码中:
$array=explode("\n", $fileInputInData);
和
$arrayExplode = explode("\n", $array);
做同样的事情两次并抛出错误。
正如@PatrickSJ 提到的,您的HTML 输出是在 3 行而不是一行上写名字、姓氏和电子邮件。
<tr><td>$firstName</td></tr>
<tr><td>$lastName</td></tr>
<tr><td>$email</td></tr>
对
<tr>
<td>$firstName</td>
<td>$lastName</td>
<td>$email</td>
<tr>
希望对您有所帮助!
与@dchao5 所建议的解决方案几乎相同。他提交时正在处理它。主要区别在于使用 php 的内置模板语法,因此您不会在业务逻辑中混合 html 代码。首先进行处理,生成页面需要呈现的元素,然后使用模板语法在页面中呈现它们总是更干净。让维护更清晰。
<?php
// all the same did not touch
$fileInput = "guestBook.txt";
$fileInputInData = file_get_contents($fileInput);
$array=explode("\n", $fileInputInData);
for($j = 0; $j < count($array); $j ++)
{
for($i = 0; $i < count($array)-1; $i ++)
{
if($array[$i] > $array[$i+1])
{
$temp = $array[$i+1];
$array[$i+1]=$array[$i];
$array[$i]=$temp;
}
}
}
//--------------------------------------
$formatted = array();
foreach($array as $row)
{
if($row != ''){
$columns = explode(" ", $row);
$formatted[] = array(
'first' => $columns[0],
'last' => $columns[1],
'email' => $columns[2]
);
}
}
?>
<table>
<thead>
<tr>
<th>First Name</th>
<th>Last Name</th>
<th>Email</th>
</tr>
</thead>
<tbody>
<?php foreach($formatted as $row): ?>
<tr>
<td><?php echo $row['first']; ?></td>
<td><?php echo $row['last']; ?></td>
<td><?php echo $row['email']; ?>td>
</tr>
<?php endforeach; ?>
</tbody>
</table>
对于我的 PHP 项目,我需要将排序的数组打印到 table 中。我们不能使用预制的排序函数来执行此操作,而是被指示创建我们自己的排序函数。排序有效,但不会按照我们需要的方式进入 html table 格式。
<?php
$fileInput = "guestBook.txt";
$fileInputInData = file_get_contents($fileInput);
$array=explode("\n", $fileInputInData);
for($j = 0; $j < count($array); $j ++)
{
for($i = 0; $i < count($array)-1; $i ++)
{
if($array[$i] > $array[$i+1])
{
$temp = $array[$i+1];
$array[$i+1]=$array[$i];
$array[$i]=$temp;
}
}
}
echo "<th>Firstname</th><th>Lastname</th><th>Email Address</th>";
$arrayExplode = explode("\n", $array);
$k = 0;
foreach($array as $arrayOut)
{
$arrayExplodeTwo = explode(" ", $arrayExplode[$k]);
$firstName = $arrayExplodeTwo[0];
$lastName = $arrayExplodeTwo[1];
$email = $arrayExplodeTwo[2];
echo '<tr><td>'; echo $firstName; echo '</td></tr>';echo '<tr><td>';
echo $lastName; echo '</td></tr>';
echo '<tr><td>'; echo $email; echo '</td></tr>';
$k++;
}
?>
代码输出如下:
Firstname Lastname Email
代码不想将数据正确打印到 table。取出foreach循环中explode的具体分解输出成table。但是,这样做并没有将它们分解成 table 的空间,每行只有一个框,其他 2 个框为空。它将数据打印到 Firstname 列中的 table 中,每行都有数据。将数据格式化为特定的行会导致它在列中不打印任何内容,只是一个空的 table.
在将 explode 函数添加到靠近代码底部的 foreach 循环之前,我的代码是这样输出到网络浏览器的。
Firstname Lastname Email Address
Anon emous anon@email.com
Matthew rando rando@gmail.com has signed in.
Matthew rando rando@gmail.com has signed in.
Matthew rando rando@gmail.com has signed in.
Person Anon Anon@emailaddr.com has signed in.
Person AnonyMouse AnonyMouse@emailaddr.com has signed in.
Person Name randomaddr@example.com has signed in.
Test Person thispersonisatest@fake.com has signed in.
Test PersonTwo thispersonisatestTwo@fake.com has signed in.
random name randomname@example.com
test personand testPersonAnd@testemail.com has signed in.
在 foreach 循环中添加 explode 函数后,结果打印如下:
Firstname Lastname Email Address
在table期间没有数据,输出为空白table。
提前感谢您的帮助。
我对您的 guestBook.txt 文件做了一些假设,并得到了以下代码。
<?php
# Read and parse the file
$fileInput = "guestBook.txt";
$fileInputInData = file_get_contents($fileInput);
$array=explode("\n", $fileInputInData);
# Sort the data
for($j = 0; $j < count($array); $j ++)
{
for($i = 0; $i < count($array)-1; $i ++)
{
if($array[$i] > $array[$i+1])
{
$temp = $array[$i+1];
$array[$i+1]=$array[$i];
$array[$i]=$temp;
}
}
}
# Check the sort results
#var_dump($array);
# Echo the table header
echo "<tr><th>Firstname</th><th>Lastname</th><th>Email Address</th></tr>";
# Loop through each element of the sorted array
foreach($array as $arrayOut)
{
# Explode the current array element by spaces
$arrayExplode = explode(" ", $arrayOut);
# Assign the data
$firstName = $arrayExplode[0];
$lastName = $arrayExplode[1];
$email = $arrayExplode[2];
# Echo out the results
echo '<tr>';
echo ' <td>'; echo $firstName; echo '</td>';
echo ' <td>'; echo $lastName; echo '</td>';
echo ' <td>'; echo $email; echo '</td>';
echo '</tr>';
}
?>
关于您的原始代码的一些评论:
- 在你的代码中:
$array=explode("\n", $fileInputInData);
和$arrayExplode = explode("\n", $array);
做同样的事情两次并抛出错误。
正如@PatrickSJ 提到的,您的HTML 输出是在 3 行而不是一行上写名字、姓氏和电子邮件。
<tr><td>$firstName</td></tr> <tr><td>$lastName</td></tr> <tr><td>$email</td></tr>
对
<tr>
<td>$firstName</td>
<td>$lastName</td>
<td>$email</td>
<tr>
希望对您有所帮助!
与@dchao5 所建议的解决方案几乎相同。他提交时正在处理它。主要区别在于使用 php 的内置模板语法,因此您不会在业务逻辑中混合 html 代码。首先进行处理,生成页面需要呈现的元素,然后使用模板语法在页面中呈现它们总是更干净。让维护更清晰。
<?php
// all the same did not touch
$fileInput = "guestBook.txt";
$fileInputInData = file_get_contents($fileInput);
$array=explode("\n", $fileInputInData);
for($j = 0; $j < count($array); $j ++)
{
for($i = 0; $i < count($array)-1; $i ++)
{
if($array[$i] > $array[$i+1])
{
$temp = $array[$i+1];
$array[$i+1]=$array[$i];
$array[$i]=$temp;
}
}
}
//--------------------------------------
$formatted = array();
foreach($array as $row)
{
if($row != ''){
$columns = explode(" ", $row);
$formatted[] = array(
'first' => $columns[0],
'last' => $columns[1],
'email' => $columns[2]
);
}
}
?>
<table>
<thead>
<tr>
<th>First Name</th>
<th>Last Name</th>
<th>Email</th>
</tr>
</thead>
<tbody>
<?php foreach($formatted as $row): ?>
<tr>
<td><?php echo $row['first']; ?></td>
<td><?php echo $row['last']; ?></td>
<td><?php echo $row['email']; ?>td>
</tr>
<?php endforeach; ?>
</tbody>
</table>