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

このコードは、配列の定義に誤りがなければ機能しますが、ここで提供されているすべてのオプションを試して、より良い解決策を見つけることをお勧めします。

$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 に答える
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 に答える
0

これは、PHP によってバックエンドで生成された結果を表示するために実際に使用する Javascript であるDataTablesの優れた候補になります。これは、標準の HTML テーブル出力に多くの機能を追加する本格的な JavaScript グリッド システムです。それを機能させるには、次のようにします。

  1. 示されているように結果を取得し、json_encoded 文字列 (つまり、echo json_encode($array)) として出力します。これを別のファイルで行うので、クリーンなテキストが画面に出力されます。
  2. テーブルを表示するページで、「ダミーテーブル」を設定します
  3. 次のように、ダミー テーブルと同じページに Datatables をセットアップします。

    $(document).ready(function() {
        $('#replace').dataTable( {
            "bProcessing": true,
            "sAjaxSource": 'file.php'
        } );
    } );
    
  4. チュートリアルに従って、並べ替え、フィルタリング、ページングなどの値を設定します。

Datatables は、標準の HTML テーブルよりもはるかに優れた機能を提供します。データの処理はすでに 90% 完了しています。画面に何かを詰め込むよりもはるかにユーザーフレンドリーです。

于 2011-03-03T20:34:33.383 に答える
0

データを転置する (列を行に変換する) 前に、使用できない最初のレベルを削除して深さ/複雑さを軽減し、残っているもののインデックス付き配列を生成する必要があります。

次に、単純化された新しいデータ構造で最初の配列を反復処理し、列データを抽出します。implode()各列 (3 つある) は、柔軟な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

以下の 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 に答える
-1

フィールドごとに for ループを記述して、ループごとに 1 行を表示することができます。

于 2011-03-03T20:02:27.043 に答える