2

私のデータはデータベースから取得されgrouped by day_id、 であったため、配列は でソートされday_idます。

コード + サンプル出力が提供されていますが、言葉にするのは難しいです。

この受け入れられた回答からはこれまでインスピレーションを得ましたが、少し調整が必要です。

$array = array(
            0 => array(
                'id' => '5',
                'day_id' => '1',
                'Foo' => array(
                    'id' => '28',
                    'name' => 'My day_id is 1'
                )
            ),
            1 => array(
                'id' => '6',
                'day_id' => '1',
                'Foo' => array(
                        'id' => '29',
                        'name' => 'My day_id is 1'
                )
            ),
            2 => array(
                'id' => '7',
                'day_id' => '2',
                'Foo' => array(
                     'id' => '30',
                     'name' => 'My day_id is 2'
                )
            ),    
            3 => array(
                'id' => '8',
                'day_id' => '3',
                'Foo' => array(
                       'id' => '31',
                      'name' => 'My day_is 3'
                )
            )
);

そして、それを出力する私のコード:

$day = 0;
foreach($array as $a) {

     // $a['day_id'] = 1, condition is true. output header once.
    if($day != $a['day_id']) {
        echo '<h3>The Day is ' . $a['day_id'] . '</h3>' . "\n";
    }

    // output the elements Foo key content.
    echo $a['Foo']['name'] . "\n";

    // store the current value to compare on the next iteration
    // $a['day_id'] will eventually be 2, causing the condition to fire again.
    $day = $a['day_id']; 
}

これは以下を出力します:

<h3>The Day is 1</h3>
My day_id is 1
My day_id is 1

<h3>The Day is 2</h3>
My day_id is 2

<h3>The Day is 3</h3>
My day_is 3

各「日」を DIV でラップしたいのですが、ロジックがわかりません。を open divに置き換える<h3>と、 close をどこに置くべきかわかりません</div>。これまでの私の試みは、毎日opendiv を持つことになりましたが、閉じたものではないため、別々ではなくネストされています。

レイアウトを壊す</div><div class="day-X">余分なものが最初にあるので、私は置くことができません.</div>

望ましい出力:

<div class="day-1">
  <h3>The Day is 1</h3>
  My day_id is 1
  My day_id is 1
</div>
<div class="day-2">
  <h3>The Day is 2</h3>
  My day_id is 2
</div>

<div class="day-3">
  <h3>The Day is 3</h3>
  My day_is 3
</div>

これが理にかなっていることを願っています-ありがとう

4

1 に答える 1

2

1つは日用、もう1つはこの日のアイテム用の2回ループする必要があります。他のSQLクエリを使用せずに、最初に日を配列に格納する必要があります。次に、日をループし、日ごとに<div>と日のヘッダーをエコーし​​、最後にをエコーし</div>​​ます。

foreach内では、同じ配列を使用して再度ループし、各アイテムが同じ日であるかどうかを確認できます。はいの場合はアイテムの名前をエコーし​​、そうでない場合は何もしません。

私はこのコードをテストしました。チェックして、問題が発生した場合はお知らせください。

foreach($array as $day){
    $days[] = $day['day_id']; // store all the days in an array
}
    // now days[] has [1,1,2,3]

$days = array_unique($days); // get unique days only no duplicated 

    //now days[] has [1,2,3]


foreach($days as $d){ // for each day

    echo '<div class = "day-'.$d.'">';
     echo '<h3>The Day is ' . $d . '</h3>' . "\n";

    foreach($array as $a) { // check all other items if the item has the same day then echo 

        if($a['day_id'] == $d){

            echo $a['Foo']['name'] . "\n";
        }
    }

    echo '</div>';

}

出力:

<div class = "day-1">
    <h3>The Day is 1</h3>
        My day_id is 1
        My day_id is 1
</div>

<div class = "day-2">
    <h3>The Day is 2</h3>
        My day_id is 2
</div>

<div class = "day-3">
    <h3>The Day is 3</h3>
        My day_is 3
</div>
于 2013-03-04T18:18:22.573 に答える