【问题标题】:Echo html table from PHP array从 PHP 数组回显 html 表
【发布时间】:2016-10-19 13:32:37
【问题描述】:

我正在学习 php,但我被一项任务困住了.. 我有一个看起来像这样的数组:

$data[1]["First"]   = "Iva";
$data[1]["Last"]    = "Ivić";
$data[1]["Date"]    = "2016-09-29";
$data[1]["Paid"]    = "Yes";

$data[2]["First"]   = "Petar";
$data[2]["Last"]    = "Perić";
$data[2]["Date"]    = "2016-02-08";
$data[2]["Paid"]    = "No";

$data[3]["First"]   = "Tomo";
$data[3]["Last"]    = "Tomić";
$data[3]["Date"]    = "2015-08-22";
$data[3]["Paid"]    = "Yes";

我需要从这个数组中回显 HTML 表。在值 ['Paid'] 上,html 表应该输出选择字段并显示当前值作为选择。 此外,表的第一列应分配#ID 编号。

到目前为止,我已经设法创建了表格,但我不知道如何计算和回显 # 以及如何让选择字段工作。第二个值对我不起作用。

<table border="1" align="center" width="80%">
<tr bgcolor="yellow">
    <th>ID #</th>
    <th>First</th>
    <th>Last</th>
    <th>Date</th>
    <th>Paid</th>
</tr>
<?php 

foreach ( $data as $info )
{
// date transform
$date = explode('-', $info['Date']);
//var_dump($date); 

echo '<tr align="center" bgcolor="#f6f6f6">';
echo ' <td>' '</td>';// How to count #IDs starting from 1?     
echo '<td>'. $info['First'] .'</td>';
echo '<td>'. $info['Last'] .'</td>';
echo '<td>'. $date[2].'.'.$date[1].'.'.$date[0].'.</td>';
//echo '<td>'. $info['Paid'] .'</td>';

echo '<td>';
echo '<select name="Paid">';
echo '<option value="0" selected>'. $info['Paid'] .'</option>';
echo '<option value="1">'. $info['Paid'] .'</option>';//This is where I'm stuck
echo '</select>';
echo '</td>';
echo '</tr>';
}
?>
</table>
?>

谢谢。

【问题讨论】:

  • 需要统计记录吗?您不能将每个子数组键用于 id。吗?
  • 您可以在第二个选项中用&lt;?php echo ( $info[ 'Paid' ] == 0 ? 'selected' : '' ); &gt; 替换选中的字段,将0 替换为1。这仅对本示例非常有用,因为它不易扩展。 echo '&lt;option value="0" &lt;?php echo ( $info[ 'Paid' ] == 0 ? 'selected' : '' ); &gt;&gt;'. $info['Paid'] .'&lt;/option&gt;'; echo '&lt;option value="1" &lt;?php echo ( $info[ 'Paid' ] == 1 ? 'selected' : '' ); &gt;&gt;'. $info['Paid'] .'&lt;/option&gt;';

标签: php html multidimensional-array


【解决方案1】:

您可以使用很多循环来实现这一点,这里最简单的情况是foreach() 循环。

<!-- conditional loops -->
<?php foreach($data as $single): ?>

    <!-- shorthand PHP statement to echo the result -->
    <td> <?= $single['First']; ?> </td>

<?php endforeach; ?>

注意 - 数组索引从 0 开始,而不是 1。所以第一个值是 $data[0]['First']

如果要为其中的每个数组创建表,则可以像这样使用 嵌套循环

<?php for($i = 0; $i <= count($data); $i++):
    foreach($data[$i] as $key => $val): ?>
        <td>
            <!-- ternary expression -->
            <tr> <?= ($key == "First") ? $val : ""; ?> </tr>
        </td>
    <?php endforeach;
endfor;

如果您喜欢不同的方法,可以使用while() 循环来实现相同的想法:

<?php $i = 0;
while($i != count($data)): ?>
    <tr> <?= $data[$i++]['First']; ?> </tr>
<?php endwhile;

未来注意事项 - 使用 bool 数据类型比使用“yes”、“no”字符串要容易得多。例如:

$paid = true;
echo ($paid) ? 'selected' : '';

而不是类似:

echo ($paid == 'No') ? '' : 'selected';

【讨论】:

  • 我知道有很多循环可以实现我的需要,但我仍在学习过程中。我用foreach() 循环进行了计数。似乎是最简单的方法。
  • 它解决了您的问题吗?还是我错过了您希望我扩展的任何内容? @MarioSmode
  • 是的,它确实有帮助!我设法得到了我需要的东西。然而,有两件事情困扰着我,一件,一件带有选择选项的事情,@Progrock 提供了一个可行的解决方案。我现在如何标记正确答案?你们俩都很有帮助...
  • 在答案左边打勾@MarioSmode
【解决方案2】:

数组中的第一个条目是第零个条目。因此,如果您声明数组,请这样做:

$data = [
   [ // 0
      "First" => "Iva",
      "Last" => "Ivic",
      "Date" => "2016-09-26",
      "Paid" => "Yes",
   ], 
   [ // 1
      // etc.
   ],
];

接下来,如果你想要 foreach 循环中的索引,你应该这样做:

foreach($data as $index => $info){
    // $index will now be 0 in the first iteration, 1 in the second etc.
    echo "<td>#" . ($index + 1) . "</td>";
}

【讨论】:

  • OP的数组索引从1开始,为什么要加1呢?
  • OP 的数组确实可以,但不是我的。如果这个$data 是某个JSON 数组,那么数组中的第一项将有键0。$data 的声明不太正确,所以我想我会提一下。 ;-)
  • 理论上没有错,但既然 OP 说他正在学习 PHP,我只想提一下数组从 0 开始,而不是从 1 开始。仅此而已。
【解决方案3】:

通过对您的代码进行细微调整,您只需检查您的支付价值,如果它与您的选项匹配,则添加选定的属性。

您可以使用 $data 键作为 id。

<?php

$data[1]["First"]   = "Iva";
$data[1]["Last"]    = "Ivić";
$data[1]["Date"]    = "2016-09-29";
$data[1]["Paid"]    = "Yes";

$data[2]["First"]   = "Petar";
$data[2]["Last"]    = "Perić";
$data[2]["Date"]    = "2016-02-08";
$data[2]["Paid"]    = "No";

$data[3]["First"]   = "Tomo";
$data[3]["Last"]    = "Tomić";
$data[3]["Date"]    = "2015-08-22";
$data[3]["Paid"]    = "Yes";

?>
<table>
    <thead>
    <tr>
        <th>ID #</th>
        <th>First</th>
        <th>Last</th>
        <th>Date</th>
        <th>Paid</th>
    </tr>
</thead>
<tbody>
<?php 
foreach ( $data as $key => $info )
{
    $date = explode('-', $info['Date']);
    echo '<tr>';
        echo '<td>' . $key . '</td>';
        echo '<td>'. $info['First'] .'</td>';
        echo '<td>'. $info['Last'] .'</td>';
        echo '<td>'. $date[2].'.'.$date[1].'.'.$date[0].'.</td>';
        echo '<td>';
            echo '<select name="Paid">';
            $selected = $info['Paid'] == 'Yes' ? 'selected' : '';
            echo "<option value=0 $selected >Yes</option>";
            $selected = $info['Paid'] == 'No' ? 'selected' : '';
            echo "<option value=1 $selected >No</option>";
            echo '</select>';
        echo '</td>';
    echo '</tr>';
}
?>
</table>

我可能会分别使用 Yes 和 No 作为选项或 1 和 0 的值,或者只使用复选框。但各有千秋。

【讨论】:

  • 太棒了,谢谢!在我正在参加的课程中,我得到了这个数组。我知道有更好的方法来创建一个数组.. :-)
  • 数据数组的声明方式没有问题。
  • 旧的编辑问题以适应答案的技巧... Grumble grumble。
猜你喜欢
  • 1970-01-01
  • 2013-11-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-04-21
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多