2

我正在尝试将数组打印到 php 中的 html 表中,并且遇到数组元素数量不同的问题(例如,缺少字段)。

如何解决有时数组中缺少一个(或多个)标题元素的问题,因此这些值最终出现在错误的标题下?

这是我的代码。我想我需要添加另一个循环以确保所有 $rows 与 $keys 对齐...?

输入数组:

array (size=16)
 0=>
  'created_by' => string 'me@example.com' (length=31)
  'bug_status' => string 'verified' (length=8)
  'reported_by' => string 'me@example.com' (length=31)
  'modified_ts' => string '1413503800000' (length=13)
  'bug_id' => string '123' (length=3)
  'bug_severity' => string 'normal' (length=6)
  'product' => string 'core graveyard' (length=14)
  'bug_version_num' => string '9' (length=1)
  'assigned_to' => string 'me@example.com' (length=19)
  'op_sys' => string 'windows nt' (length=10)
  '_id' => string '123.1217503800000' (length=17)
  'component' => string 'viewer app' (length=10)
  'modified_by' => string 'nobody@example.org' (length=18)
  'priority' => string 'p2' (length=2)
  'qa_contact' => string '#unknown' (length=8)
  'created_ts' => string '901720800000' (length=12)

这是我的 PHP 代码:

$keys = array_keys($array[0]);
echo "<table><tr><th>".implode("</th><th>", $keys)."</th></tr>";
foreach ($array as $rows) {
  if (!is_array($rows))
    continue;
  echo "<tr><td>".implode("</td><td>", $rows )."</td></tr>";
}
echo "</table> 
4

2 回答 2

1

这就是我要做的:

$keys = array_keys($array[0]);
echo '<table><tr><th>'.implode('</th><th>', $keys).'</th></tr>';

foreach ($array as $row){
    if (!is_array($row)) continue;

    //Go through each of the keys you need and set them to empty if they're not set
    foreach($keys as $keyName){
        if (!isset($row[$keyName])  $row[$keyName] = '';
    }

    echo '<tr><td>'.implode("</td><td>", $row ).'</td></tr>';
}
echo '</table>';

或者,您可以使用empty()is_null()或其他检查来代替!isset(),具体取决于您期望/测试的内容。

于 2013-06-03T22:28:29.650 回答
1

这将为您创建表和标题,然后仅当该键存在时才插入值。我确信它可以改进,但可以很好地处理示例数据。

$array = array(
    array(
        'a' => '1',
        'b' => '2',
        'c' => '3'
    ),
    array(
        'a' => '1',
        'b' => '2',
        'd' => '4',
        'e' => '5'
    )
);

$headers = array();
$thead = "<thead>";
foreach($array as $innerArray) {
    foreach($innerArray as $key => $value) {
        if (!in_array($key, $headers)) {
            $thead .= "<th>" . $key . "</th>";
            $headers[] = $key;
        }
    }
}
$thead .= "</thead>";

$tbody = "<tbody>";
foreach($array as $innerArray) {
    $tbody .= "<tr>";
    foreach($headers as $th) {
        $tbody .= "<td>";
        if (isset($innerArray[$th])) {
            $tbody .= $innerArray[$th];
        }
        $tbody .= "</td>";
    }
    $tbody .= "</tr>";
}

$table = "<table>" . $thead . $tbody . "</table>";

echo $table;
于 2013-06-04T18:16:02.950 回答