如何从PHP数组创建HTML表格?

46

我该如何从PHP数组创建一个HTML表格?一个包含标题为'title''price''number'的表格。

$shop = array(
    array("rose",   1.25, 15),
    array("daisy",  0.75, 25),
    array("orchid", 1.15, 7 ),
); 

4
这个问题与https://dev59.com/X2445IYBdhLWcg3wq8Lp完全相同。请不要重复发布问题 - 您只是浪费自己(和其他人的)时间。 - John Parker
5
合并完成。祈祷我不会再次合并! - user1228
此线程已在此处得到解答 点击这里 - Delickate
18个回答

2
构建两个foreach循环并遍历您的数组。打印出值并在其周围添加HTML表格标签。

2

PHP代码:

$multiarray = array (

    array("name"=>"Argishti", "surname"=>"Yeghiazaryan"),
    array("name"=>"Armen", "surname"=>"Mkhitaryan"),
    array("name"=>"Arshak", "surname"=>"Aghabekyan"),

);

$count = 0;

foreach ($multiarray as $arrays){
    $count++;
    echo "<table>" ;               

    echo "<span>table $count</span>";
    echo "<tr>";
    foreach ($arrays as $names => $surnames){

        echo "<th>$names</th>";
        echo "<td>$surnames</td>";

    }
    echo "</tr>";
    echo "</table>";
}

CSS:

table {
    font-family: arial, sans-serif;
    border-collapse: collapse;
    width: 100%;
}

td, th {
    border: 1px solid #dddddd;
    text-align: left;
    padding: 8px;``
}

在table和tr之间使用span标签是无效的HTML。 - mickmackusa

1

我有类似的需求,但我的数组可能包含键/值键/数组数组中的数组,就像这个数组:

$array = array(
    "ni" => "00000000000000",
    "situacaoCadastral" => array(
        "codigo" => 2,
        "data" => "0000-00-00",
        "motivo" => "",
    ),
    "naturezaJuridica" => array(
        "codigo" => "0000",
        "descricao" => "Lorem ipsum dolor sit amet, consectetur",
    ),
    "dataAbertura" => "0000-00-00",
    "cnaePrincipal" => array(
        "codigo" => "0000000",
        "descricao" => "Lorem ips",
    ),
    "endereco" => array(
        "tipoLogradouro" => "Lor",
        "logradouro" => "Lorem i",
        "numero" => "0000",
        "complemento" => "",
        "cep" => "00000000",
        "bairro" => "Lorem ",
        "municipio" => array(
            "codigo" => "0000",
            "descricao" => "Lorem ip",
        ),
    ),
    "uf" => "MS",
    "pais" => array(
        "codigo" => "105",
        "descricao" => "BRASIL",
    ),
    "municipioJurisdicao" => array(
        "codigo" => "0000000",
        "descricao" => "DOURADOS",
    ),
    "telefones" => array(
        array(
            'ddd' => '67',
            'numero' => '00000000',
        ),
    ),
    "correioEletronico" => "lorem@ipsum-dolor-sit.amet",
    "capitalSocial" => 0,
    "porte" => "00",
    "situacaoEspecial" => "",
    "dataSituacaoEspecial" => ""
);

我创建的函数解决的问题是:
function array_to_table($arr, $first=true, $sub_arr=false){
    $width = ($sub_arr) ? 'width="100%"' : '' ;
    $table = ($first) ? '<table align="center" '.$width.' bgcolor="#FFFFFF" border="1px solid">' : '';
    $rows = array();
    foreach ($arr as $key => $value):
        $value_type = gettype($value);
        switch ($value_type) {
            case 'string':
                $val = (in_array($value, array(""))) ? "&nbsp;" : $value;
                $rows[] = "<tr><td><strong>{$key}</strong></td><td>{$val}</td></tr>";
                break;
            case 'integer':
                $val = (in_array($value, array(""))) ? "&nbsp;" : $value;
                $rows[] = "<tr><td><strong>{$key}</strong></td><td>{$value}</td></tr>";
                break;
            case 'array':
                if (gettype($key) == "integer"):
                    $rows[] = array_to_table($value, false);
                elseif(gettype($key) == "string"):
                    $rows[] = "<tr><td><strong>{$key}</strong></td><td>".
                        array_to_table($value, true, true) . "</td>";
                endif;
                break;
            default:
                # code...
                break;
        }
    endforeach;
    $ROWS = implode("\n", $rows);
    $table .= ($first) ? $ROWS . '</table>' : $ROWS;
    return $table;
}

echo array_to_table($array);

而输出结果为this


0
<?php

echo "<table>
<tr>
<th>title</th>
<th>price</th>
<th>number</th>
</tr>";
for ($i=0; $i<count($shop, 0); $i++)
{
    echo '<tr>';
    for ($j=0; $j<3; $j++)
    {
        echo '<td>'.$shop[$i][$j].'</td>';
    }
    echo '</tr>';
}
echo '</table>';

你可以进行优化,但这应该足够了。


0

您可以使用foreach循环遍历数组$shop,并在每次迭代中获取其中一个数组以打印其值,如下所示:

echo '<table>';
echo '<thead><tr><th>title</td><td>price</td><td>number</td></tr></thead>';
foreach ($shop as $item) {
    echo '<tr>';
    echo '<td>'.$item[0].'</td>';
    echo '<td>'.$item[1].'</td>';
    echo '<td>'.$item[2].'</td>';
    echo '</tr>';
}
echo '</table>';

0

将数组转换为表格。 将数组转换为div。 将JSON转换为表格。 将JSON转换为div。

所有这些都可以通过该类轻松处理。单击此处获取类

如何使用它?

只需获取对象即可

$obj = new Arrayinto();

创建一个你想要转换的数组

$obj->array_object = array("AAA" => "1111",
                  "BBB" => "2222",
                  "CCC" => array("CCC-1" => "123",
                                 "CCC-2" => array("CCC-2222-A" => "CA2",
                                                  "CCC-2222=B" => "CB2"
                                                 )
                                )

                 );

如果你想把数组转换成表格,请调用此函数。

$result = $obj->process_table();

如果你想将数组转换成 div,请调用此函数。
$result = $obj->process_div();

假设你有一个JSON。
$obj->json_string = '{
            "AAA":"11111",
            "BBB":"22222",
            "CCC":[
                    {
                        "CCC-1":"123"
                    },
                    {
                        "CCC-2":"456"
                    }
                  ] 
         }
        ';

你可以像这样转换为表格/分割线:

$result = $obj->process_json('div');

或者

$result = $obj->process_json('table');

0

这是@GhostInTheSecureShell回答的更通用版本。

<?php
function build_tabular_format($items)
{
    $html = '';
    $items_chunk_array = array_chunk($items, 4);
    foreach ($items_chunk_array as $items_single_chunk)
    {
        $html .= '<div class="flex-container">';
        foreach ($items_single_chunk as $item)
        {
            $html .= '<div class="column-3">';
            $html .= $item['fields']['id'];
            $html .= '</div>';
        }
        $html .= '</div>';
    }
    return $html;
}

$items = array(
    array(
        'fields' => array(
            'id' => '1',
        ) ,
    ) ,
    array(
        'fields' => array(
            'id' => '2',
        ) ,
    ) ,
    array(
        'fields' => array(
            'id' => '3',
        ) ,
    ) ,
    array(
        'fields' => array(
            'id' => '4',
        ) ,
    ) ,

    array(
        'fields' => array(
            'id' => '5',
        ) ,
    ) ,
    array(
        'fields' => array(
            'id' => '6',
        ) ,
    ) ,
    array(
        'fields' => array(
            'id' => '7',
        ) ,
    ) ,
    array(
        'fields' => array(
            'id' => '8',
        ) ,
    ) ,
);

echo build_tabular_format($items);
?>

输出将会像这样:

<div class="flex-container">
    <div class="column-3">1</div>
    <div class="column-3">2</div>
    <div class="column-3">3</div>
    <div class="column-3">4</div>
</div>
<div class="flex-container">
    <div class="column-3">5</div>
    <div class="column-3">6</div>
    <div class="column-3">7</div>
    <div class="column-3">8</div>
</div>

0

这将把二维数组打印成表格。

第一行将作为表头。

function array_to_table($table) 
{   
    echo "<table>";

    // Table header
    foreach ($table[0] as $header) {
      echo "<th>".$header."</th>";
    }

    // Table body
    $body = array_slice( $table, 1, null, true);
    foreach ($body as $row) {
      echo "<tr>";
        foreach ($row as $cell) {
          echo "<td>".$cell."</td>";
        } 
      echo "</tr>";
    }     
  echo "</table>";
}

用法:

arrayOfArrays = array(
    array('header1',"header2","header3"),
    array('1.1','1.2','1.3'),
    array('2.1','2.2','2.3'),
);


array_to_table($arrayOfArrays);

结果:

<table><tbody><tr><th>header1</th><th>header2</th><th>header3/th><tr><td>1.1</td><td>1.2</td><td>1.3</td></tr><tr><td>2.1</td><td>2.2</td><td>2.3</td></tr><tr><td>3.1</td><td>3.2</td><td>3.3</td></tr></tbody></table>

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接