0

私はこのような配列を持っています:

Array
(
    [0] => Array
        (
            [date] => 2012-11-29
            [description] => Work Done
            [hours] => 1.0
            [id] => 6502
            [person-id] => 8853
            [project-id] => 8928
            [todo-item-id] => 122353
            [person-name] => Jane Doe
        )

    [1] => Array
        (
            [date] => 2012-11-29
            [description] => Work Done 2
            [hours] => 1.0
            [id] => 6502
            [person-id] => 8853
            [project-id] => 8928
            [todo-item-id] => 122353
            [person-name] => Jane Doe
        )

    [2] => Array
        (
            [date] => 2012-11-28
            [description] => Work Done 3
            [hours] => 1.0
            [id] => 6502
            [person-id] => 8853
            [project-id] => 8928
            [todo-item-id] => 122353
            [person-name] => Jane Doe
        )

等。

この情報を、日付別にグループ化されたテーブルに表示したいと考えています。私は foreach を使用して各値を取得していますが、各配列で日付が同じかどうかを調べ、そうであれば日付を一度だけエコーする方法を見つけようとしています。これは私がこれまでに得たものです...

<table>
     <tbody>
                <?php 

                  foreach($time as $log){
                    //tried this but it doesn't work 
                    //if(array_unique($log['date'])){
                      echo '<thead>
                              <tr class="info">
                                <td colspan="3">'.$log[date].'</td>
                              </tr>
                            </thead>';
                          //};


                  echo "<tr>";
                  echo "<td>{$log['todo-item-id']}</td>";
                  echo "<td>{$log['description']}</td>";
                  echo "<td>{$log['hours']}</td>";
                  echo "</tr>";
                } ?>

              </tbody>
</table>
4

3 に答える 3

3

あなたは1つのtheadしか持つことができません。ループの最後、または次の比較を行った後に日付を設定します。この日付は前の日付と等しくないか、設定されていません。その場合は出力し、そうでない場合はノーブレークスペースを出力します。

<?php 

foreach($time as $log) {
    // check if it is not set or not equal and output if needed
    echo '<tr class="info">
            <td colspan="3">'.(!isset($prevdate) || $prevdate!=$log[date]? $log[date] : '&nbsp;').'</td>
          </tr>
        ';

    echo "<tr>
        <td>{$log['todo-item-id']}</td>
        <td>{$log['description']}</td>
        <td>{$log['hours']}</td>
        </tr>";
    // set it
    $prevdate=$log[date];
} 
?>
于 2012-11-30T18:06:25.887 に答える
0

ループを実行しているときに、前の日付を保存します。同じ場合はエコーしないでください。そうでない場合は、新しい日付を前の日付として保存し、新しい日付をエコーし​​ます。

于 2012-11-30T18:03:57.297 に答える
0

問題の解決策として、以下のコード スニペットを参照してください。

        <table>
            <tbody>
            <?php 
    $a=array();
              foreach($time as $log){

                if(!in_array($log['date'],$a)) { array_push($a,$log['date']);

                  echo '<thead>
                          <tr class="info">
                            <td colspan="3">'.$log[date].'</td>
                          </tr>
                        </thead>';
                      }


              echo "<tr>";
              echo "<td>{$log['todo-item-id']}</td>";
              echo "<td>{$log['description']}</td>";
              echo "<td>{$log['hours']}</td>";
              echo "</tr>";
            } ?>

          </tbody>
    </table>
于 2012-11-30T19:12:22.847 に答える