为了账号安全,请及时绑定邮箱和手机立即绑定

显示带有两个标题的 PHP 数组中的 HTML 表

显示带有两个标题的 PHP 数组中的 HTML 表

PHP
MYYA 2022-06-11 18:45:35
我有一个包含运动结果的数组,如下所示:Array(    [0] => Array        (            [name] => Alexander            [distance] => 60            [value] => 9        )    [1] => Array        (            [name] => Alexander            [distance] => 100            [value] => 10        )    [2] => Array        (            [name] => Alexander            [distance] => 200            [value] => 11        )    [3] => Array        (            [name] => Alexander            [distance] => 400            [value] => 12        )    [4] => Array        (            [name] => Dmitriy            [distance] => 60            [value] => 5        )    [5] => Array        (            [name] => Dmitriy            [distance] => 100            [value] => 6        )    [6] => Array        (            [name] => Dmitriy            [distance] => 200            [value] => 7        )    [7] => Array        (            [name] => Dmitriy            [distance] => 400            [value] => 8        )    [8] => Array        (            [name] => Sergei            [distance] => 60            [value] => 1        )    [9] => Array        (            [name] => Sergei            [distance] => 100            [value] => 2        )    [10] => Array        (            [name] => Sergei            [distance] => 200            [value] => 3        )    [11] => Array        (            [name] => Sergei            [distance] => 400            [value] => 4        ))我需要在 html 表中以特定方式显示数组数据,应该是这样的。顶部标题应包含“距离”键的所有唯一值,左侧标题应包含“名称”键的所有唯一值:           |  60  |  100  |  200  |  400===========================================Alexnader  |  9   |  10   |   11  |  12===========================================Dmitriy    |  5   |   6   |   7   |   8===========================================Sergei     |  1   |   2   |   3   |   4我怎样才能用最少的循环或使用 php 数组方法以最快的方式做到这一点?谢谢你。
查看完整描述

2 回答

?
暮色呼如

TA贡献1853条经验 获得超9个赞

获取表格的唯一距离和名称。


$names = array_unique(array_map(fn($a) => $a['name'], $data));

$dists = array_unique(array_map(fn($a) => $a['distance'], $data));

制作一个按名称和距离查找表值的函数。


function findValue($dist, $name, $data): string {

    foreach($data as $d) {

        if($d['name'] != $name || $d['distance'] != $dist ) continue;

        return (string) $d['value'];

    }

    return '';

}

现在输出以头部和距离开头的表格


echo "<table>\n";

echo "<tr><th></th>", implode('', array_map(fn($col) => "<th>$col</th>", $dists)), "</tr>\n";

使用我们的 find 函数逐行列出每个名称的数据


foreach($names as $name) {

    $row = [];

    foreach($dists as $dist) {

        $row[] = '<td>' . findValue($dist, $name, $data) . '</td>';

    }

    $rowText = join('', $row);

    echo "<tr><td>$name</td>$rowText</tr>\n";

}

最后关上桌子。


echo "</table>\n";

结果是


<table>

<tr><th></th><th>60</th><th>100</th><th>200</th><th>400</th></tr>

<tr><td>Alexander</td><td>9</td><td>10</td><td>11</td><td>12</td></tr>

<tr><td>Dmitriy</td><td>5</td><td>6</td><td>7</td><td>8</td></tr>

<tr><td>Sergei</td><td>1</td><td>2</td><td>3</td><td>4</td></tr>

</table>


查看完整回答
反对 回复 2022-06-11
?
饮歌长啸

TA贡献1951条经验 获得超3个赞

我们必须先重组数组


$array = Array

(

    "0" => Array

    (

        "name" => "Alexander",

        "distance" => 60,

        "value" => 9

    ),


    "1" => Array

    (

        "name" => "Alexander",

        "distance" => 100,

        "value" => 10

    ),


    "2" => Array

    (

        "name" => "Alexander",

        "distance" => 200,

        "value" => 11

    ),


    "3" => Array

    (

        "name" => "Alexander",

        "distance" => 400,

        "value" => 12

    ),


    "4" => Array

    (

        "name" => "Dmitriy",

        "distance" => 60,

        "value" => 5

    ),


    "5" => Array

    (

        "name" => "Dmitriy",

        "distance" => 100,

        "value" => 6

    ),


    "6" => Array

    (

        "name" => "Dmitriy",

        "distance" => 200,

        "value" => 7

    ),


    "7" => Array

    (

        "name" => "Dmitriy",

        "distance" => 400,

        "value" => 8

    ),


    "8" => Array

    (

        "name" => "Sergei",

        "distance" => 60,

        "value" => 1

    ),


    "9" => Array

    (

        "name" => "Sergei",

        "distance" => 100,

        "value" => 2

    ),


    "10" => Array

    (

        "name" => "Sergei",

        "distance" => 200,

        "value" => 3

    ),


    "11" => Array

    (

        "name" => "Sergei",

        "distance" => 400,

        "value" => 4

    )

);


$table_heading = array_unique(array_column($array, "distance"));


$restructured_array = [];

foreach($array as $row){

    if(!isset($restructured_array[$row["name"]])){

        $restructured_array[$row["name"]] = [];

    }

    $restructured_array[$row["name"]][$row["distance"]] = $row["value"];

}

现在可以循环数组以打印表格。


echo "<table><thead><tr>";

echo "<th></th>";

foreach($table_heading as $heading){ 

    echo "<th>".$heading."</th>";

}

echo "</tr></thead>";

echo "<tbody>"; 

foreach ($restructured_array as $key=>$rows){

    echo "<tr><th>".$key."</th>";

    foreach ($rows as $k=>$row){

         echo "<td>".$row."</td>";

    }

}

echo "</tbody></table>";

输出将是


           60   100 200 400

Alexander   9   10  11  12

Dmitriy     5   6   7   8

Sergei      1   2   3   4


查看完整回答
反对 回复 2022-06-11
  • 2 回答
  • 0 关注
  • 95 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信