簡體   English   中英

在html表中顯示PHP多維數組,列中的每個子數組

[英]Display PHP multidimensional array in html table with each subarray in a column

我相信有一種相當簡單的方法可以做到這一點。 我在數組中有以下數據:

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

我沒有測試這個,但它應該工作。 它應該作為需要做什么的一個例子。 我試圖寫這個來限制使用的 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

有點丑但有效:')

$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

如果我沒有錯誤地定義數組,則此代碼有效,但我建議您使用此處提供的所有選項並找到更好的解決方案。

$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>";

這將是DataTables 的一個很好的候選者,它實際上是我用來顯示由 PHP 在后端生成的結果的 Javascript。 它是一個成熟的 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% 的數據處理。 它比只是在屏幕上干擾東西更用戶友好。

在轉置數據(將列轉換為行)之前,您必須通過刪除不可用的第一級並生成剩余內容的索引數組來降低深度/復雜性。

然后迭代新的簡化數據結構中的第一個數組並提取列數據。 每列(有三列)將使用靈活的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>

您可以為每個字段編寫一個 for 循環,在每個循環中顯示一行。

下面的 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>';

干杯

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM