0

我确信有一个相当简单的方法可以做到这一点。我在数组中有以下数据:

Array
(
    [ActivityDiaryEntry] => Array
        (
            [date] => 2011-03-03
            [type] => Walking
            [minutes] => 60
        )

)
Array
(
    [ActivityDiaryEntry] => Array
        (
            [date] => 2011-03-02
            [type] => Walking
            [minutes] => 22
        )

)
Array
(
    [ActivityDiaryEntry] => Array
        (
            [date] => 2011-03-01
            [type] => Biking
            [minutes] => 45
        )

)

我对 PHP 不太熟练,但我知道如何按行显示这些数据以显示为<tr><td>[date]</td><td>[type]</td><td>[minutes]</td></tr>. 但我想让数据显示在这样的列中:

2011-03-01 | 2011-03-02 | 2011-03-03
------------------------------------
Biking     | Walking    | Walking
------------------------------------
45         | 22         | 60
4

7 回答 7

2

我没有对此进行测试,但它应该可以工作。它应该作为需要做的事情的一个例子。我试图写这个来限制使用的 foreach 循环的数量。如果我先重新排序数据然后执行拍摄,我需要 4 个 foreach 循环。这种方法的好处是,如果添加了更多列,则无需更新代码,只要所有记录具有相同的列数即可。

<?php
// Your list of records
$records = array(
    array( "key1" => "value", "key2" => "value", "key3" => "value" ),
    array( "key1" => "value", "key2" => "value", "key3" => "value" ),
    array( "key1" => "value", "key2" => "value", "key3" => "value" )
);

// Create an array to store the values of each row based on number of columns in first value
$rows = array_fill( 0, count( $records[0] ), "" );
$keys = array_keys( $records[0] );

// Create a column for each record in it's respective row.
foreach( $records as $k => $record )
    for( $i=0, $max=count( $rows ); $i < $max; $i++ )
        $rows[ $i ] .= "<td>".$record[ $keys[ $i ] ]."</td>";

// Turn each row in our array into an html table row.
print "<tr>".implode( "</tr><tr>", $rows )."</tr>";

这是代码测试:http ://codepad.org/SSS8S2eU

于 2011-03-03T20:55:30.450 回答
1

有点难看但有效:')

$a[0] = array('ActivityDiaryEntry' => array("date" => "2011-03-03", "type"=> "Walking", "minutes" => 60));
$a[1] = array('ActivityDiaryEntry' => array("date" => "2011-03-03", "type"=> "Walking", "minutes" => 22));
$a[2] = array('ActivityDiaryEntry' => array("date" => "2011-03-03", "type"=> "Biking", "minutes" => 42));

$keys = array_keys($a[0]["ActivityDiaryEntry"]);

echo '<table>';
for($c = 0; $c < count($a); $c++) {
    echo '<tr>';
        for($i = 0; $i < count($a[$c]['ActivityDiaryEntry']); $i++) {
            echo '<td>' . $a[$i]['ActivityDiaryEntry'][$keys[$c]] . '</td>';
        }
    echo '</tr>';       
}
echo '</table>';

http://codepad.org/5Tuk8x3Q

于 2011-03-03T21:02:32.957 回答
1

如果我没有错误地定义数组,则此代码有效,但我建议您使用此处提供的所有选项并找到更好的解决方案。

$data = array (
array (
   'ActivityDiaryEntry' => array
        (
            'date' => "2011-03-03",
            'type' => "Walking",
            'minutes' => 60
        )
    ),
    array (
    'ActivityDiaryEntry' => array
        (
            'date' => "2011-03-02",
            'type' => Walking,
            'minutes' => 22
        ) ),
array (
    'ActivityDiaryEntry' => array
        (
            'date' => "2011-03-01",
            'type' => Biking,
            'minutes' => 45
        )
        )
);    

echo "<table>";
$i = 0;

foreach ($data as $key => $val) {
echo "<tr>";
    foreach ($data as $kk => $vv){


    if ($i==0) {
        echo "<td>". $vv['ActivityDiaryEntry']['date'] ."</td>";    
    }else if ($i == 1){
        echo "<td>". $vv['ActivityDiaryEntry']['type'] ."</td>";    
    }else if ($i == 2){
        echo "<td>". $vv['ActivityDiaryEntry']['minutes'] ."</td>"; 
    }


    }

echo "</tr>";
$i++;
}

echo "</table>";
于 2011-03-03T21:35:16.553 回答
0

这将是DataTables的一个很好的候选者,它实际上是 Javascript,我用它来显示我在后端由 PHP 生成的结果。它是一个成熟的 javascript 网格系统,可为标准 HTML 表格输出添加大量功能。为了使它工作,你会:

  1. 得到如图所示的结果并输出为 json_encoded 字符串(即 echo json_encode($array) 我在单独的文件中执行此操作,以便将干净的文本输出到屏幕上。
  2. 在显示表格的页面上,设置一个“虚拟表格”
  3. 在与虚拟表相同的页面中设置数据表,如下所示:

    $(document).ready(function() {
        $('#replace').dataTable( {
            "bProcessing": true,
            "sAjaxSource": 'file.php'
        } );
    } );
    
  4. 按照教程设置排序、过滤、分页等的值。

Datatables 为您提供的功能比标准的 HTML 表格要强大得多,而且您已经完成了 90% 的数据处理。它比仅仅在屏幕上干扰内容更加用户友好。

于 2011-03-03T20:34:33.383 回答
0

在转置数据(将列转换为行)之前,您必须通过删除不可用的第一级并生成剩余内容的索引数组来降低深度/复杂性。

然后在新的简化数据结构中迭代第一个数组并提取列数据。每列(共有三列)将使用灵活的implode()ing 技术显示在其自己的表格行中。

代码:(演示

$subarrays = array_column($array, "ActivityDiaryEntry");

echo '<table>';
foreach ($subarrays[0] as $column => $notUsed) {
    echo '<tr><td>' , implode('</td><td>', array_column($subarrays, $column)) , '</td></tr>';
}
echo '</table>';

输出:

<table>
    <tr>
        <td>2011-03-03</td>
        <td>2011-03-03</td>
        <td>2011-03-03</td>
    </tr>
    <tr>
        <td>Walking</td>
        <td>Walking</td>
        <td>Biking</td>
    </tr>
    <tr>
        <td>60</td>
        <td>22</td>
        <td>42</td>
    </tr>
</table>
于 2020-07-04T21:49:05.607 回答
-1

您可以为每个字段编写一个 for 循环,在每个循环中显示一行。

于 2011-03-03T20:02:27.043 回答
-1

下面的 Javascript 答案可能是一个很好的方法,但如果您不完全习惯在应用程序中使用 Javascript,我建议您使用 PHP 和表格。这也是很好的 PHP 实践。

如果我是你,我会使用这样的代码和 css 属性来格式化你想要的表格。

  echo '<table>';
  echo '<tr><td>Date</td><td>Type</td><td>Minutes</td></tr>';

  foreach ($array as $entry){
      echo '<tr>';
      echo '<td>'.$entry['date'].'</td>';
      echo '<td>'.$entry['type'].'</td>';
      echo '<td>'.$entry['minutes'].'</td>';
      echo '</tr>';
  }

  echo '</table>';

你可以使用这样的东西来编辑你的表格显示,也可以查看http://www.w3schools.com/css/css_table.asp

echo '<tr style="border-bottom: 1px solid black;"></tr>';

干杯

于 2011-03-03T20:48:17.403 回答