【问题标题】:PHP - Creating a table with array generic elementsPHP - 使用数组通用元素创建表
【发布时间】:2020-12-30 08:04:53
【问题描述】:

使用 PHP,如何创建一个使用对键值的通用引用而不是特定键的表?我使用表格,在问题的底部,代码与下面的数组。但是,我想对任何数组(不同的键和不同数量的键)使用相同的表代码。任何建议将不胜感激。

硬编码到 PHP 表代码中的示例数组:

{
    "port": "Et2",
    "name": "**Description**",
    "status": "connected",
    "vlan": "in",
    "duplex": "Po301",
    "speed": "full",
    "type": "10G    10GBASE-CR        "
},

我希望表格代码适用于任何通用数组,例如下面的数组。也不是一个值可以是另一个数组。如果一个值是一个数组,我希望数组的所有内容都在一个表格单元格中,即使它需要换行到下一行。数组中可能有 100 个值。

{
    "key1": "value 1",
    "key2": "value 2",
    "key3": "value 3",
    "key4": ["value 1a","value 2a","value 3a"]
},

我目前正在使用以下代码来获取特定数组的元素并将其放入表中,但我想使用适用于许多网络命令输出的表代码。

for($i = 0; $i < sizeof($data); $i++)
{
    $temp .= "<tr>";
    $temp .= "<td>" . $data[$i]["port"] . "</td>";
    $temp .= "<td>" . $data[$i]["name"] . "</td>";
    $temp .= "<td>" . $data[$i]["status"] . "</td>";
    $temp .= "<td>" . $data[$i]["vlan"] . "</td>";
    $temp .= "<td>" . $data[$i]["duplex"] . "</td>";
    $temp .= "<td>" . $data[$i]["speed"] . "</td>";
    $temp .= "<td>" . $data[$i]["type"] . "</td>";
    $temp .= "</tr>";
}

/*End tag of table*/
$temp .= "</table>";

/*Printing temp variable which holds table*/
echo $temp;

【问题讨论】:

  • 可能duplicate
  • foreach 会告诉你关键和价值。我想从那一点你可以解决剩下的问题。

标签: php html arrays html-table


【解决方案1】:

我接受了@RiggsFolly 和@WOUNDEDStevenJones 所说的并将它们结合起来。在第二个 foreach 循环中,我检查 $val 是否是一个数组。如果是,我将它内爆成一个字符串。谢谢。

$temp .= "<table>";
foreach ($data as $subArray){
    $temp .= "<tr>";
    foreach ($subArray as $key => $val) {
        if (is_array($val)) { #new if
                $val = implode(", ",$val); #new if
                } #new if
        $temp .= "<td>" . $val . "</td>";
    }
    $temp .= "</tr>";
}
$temp .= "</table>";

【讨论】:

    【解决方案2】:

    像这样处理数组数组

    $temp .= "<table>";
    foreach ($data as $subArray){
        $temp .= "<tr>";
        foreach ($subArray as $key => $val) {
            $temp .= "<td>" . $val . "</td>";  
        }
        $temp .= "</tr>";
    }
    $temp .= "</table>";
    

    【讨论】:

    • 这非常有效。谢谢!我在我的问题中只错过了一个问题。有时,该值可以是一个数组。像这样:{“vlan_id”:“1”,“名称”:“默认”,“状态”:“活动”,“接口”:[“Gi4/0/11”,“Te5/0/1”]}
    • $temp .= "&lt;td&gt;" . (is_array($val) ? implode(', ', $val) : $val) . "&lt;/td&gt;"; 在这种情况下应该将值输出为 CSV(这使用 ternary operator 但您可以使用标准的 if 条件来代替)。编辑:啊,虽然我看到数组值可能有其他数组(即interfaces)。最好的办法是在内部 foreach 中编写一个单独的条件来检查 if (is_array($val)) {,然后编写您的自定义逻辑来处理这些情况。
    • 根据你所说的。我将尝试检查它是否是一个数组并将其内爆。然后希望整个字符串将打印到表格单元格中。
    猜你喜欢
    • 2012-05-08
    • 2021-03-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-31
    • 2012-03-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多