php单维数组

时间:2013-11-13 21:28:08

标签: php arrays loops foreach

我试图输出一个包含精确的文件输出事件的数组。 数组本身如下所示:

  Array (
    [0] => Array (
        [UID] => 4C2DDB6E-5B5B-4B97-BEBE-FF424BB154F8
        [DTEND] => 20131116 [SUMMARY] => test1_ONS
        [LAST-MODIFIED] => 20131111T210530Z
        [DTSTAMP] => 20131111T213437Z
        [DTSTART] => 20131112
        [LOCATION] => City
        [SEQUENCE] => 1
        [DESCRIPTION] => description here_http://www.test.com/test1
        [SUMMARY] => some text here
) )

我能够循环播放其记录并使用以下foreach循环输出所有事件:

    foreach ($events_sorted as $event) {
$client = current(explode("_", $event['SUMMARY']));
} and so on...

棘手的部分是我的事件表布局基于几个月,看起来如下:

             CLIENT   EXHIBITION   CITY
_________________________________________
OCT 2013     client   exhibition   city
             client   exhibition   city
             client   exhibition   city
________________________________________
NOV 2013     client   exhibition   city
             client   exhibition   city
________________________________________
DEC 2013     client   exhibition   city

我无法做的是循环播放所有事件,按照布局输出相应的月份名称一次,输出相应事件的数据并继续下个月

我的表格布局的构建方式是它的第一行包含月份名称数据,并且必须以某种方式区别于包含事件的所有其他行:

<table id="table_events">
                <tbody><tr id="header_row">
                <th id="date_header"></th>
                <th></th>
                <th></th>
                <th></th>
                </tr>

                <tr class="month_start">
                <td>
                <div class="month_rect">
                    <div class="month_rect_text month_long">SEPT</div>
                    <div class="month_rect_year">2013</div>
                </div>
                </td>
                <td>eee</td>
                <td>eee</td>
                <td>Oslo</td>
                </tr>

                <tr>
                <td>
                    </td>
                <td>test</td>
                <td>test</td>
                <td>test</td>
                </tr>

                <tr>
                    <td></td>
                <td>test</td>
                <td>test</td>
                <td>test</td>
                </tr>
                <tr id="oct" class="month_start">
                <td>
                <div class="month_rect">
                    <div class="month_rect_text month_short">OCT</div>
                    <div class="month_rect_year">2013</div>
                </div>
                </td>
                <td>test</td>
                <td>test</td>
                <td>test</td>
                </tr>
                <tr>
                <td>
                    </td>
                <td>test</td>
                <td>test</td>
                <td>test</td>
                </tr>
                <tr class="month_start">
                <td>
                <div class="month_rect">
                    <div class="month_rect_text month_short">NOV</div>
                    <div class="month_rect_year">2013</div>
                </div>
                </td>
                <td>test</td>
                <td>test</td>
                <td>test</td>
                </tr>

                <tr>
                <td>
                    </td>
                <td>test</td>
                <td>test</td>
                <td>test</td>
                </tr>

                </tbody></table>

到目前为止,我还尝试根据月份创建新阵列,但没有运气:

 foreach($events_sorted as $test) {
$month_number = gmdate("m", $ical->iCalDateToUnixTimestamp($test['DTSTART']));

$r = array("month" => $month_number);

}

我的最后一个想法是打印出所有事件并重置数组检查是否存在月份名称,如果它存在则不再输出它并使用不同的表格行布局但我不确定如何实现此解决方案。我希望有更简单的方法来实现所描述的效果

1 个答案:

答案 0 :(得分:1)

<table>
    <tr>
      <td width="20%"></td>
      <td>CLIENT</td>
      <td>EXHIBITION</td>
      <td>CITY</td>
    </tr>
    <?php $last_event = NULL; ?>
    <?php foreach($events as $event) : ?>
    <tr>
      <td><?php if($last_event != NULL) : if($last_event['DATE'] != $event['DATE']) : echo $event['DATE']; endif; else : echo $event['DATE']; endif; ?></td>
      <td><?php echo $event['CLIENT']; ?></td>
      <td><?php echo $event['EXHIBITION']; ?></td>
      <td><?php echo $event['CITY']; ?></td>
    </tr>
    <?php $last_event = $event; ?>
    <?php endforeach; ?>
  </table>

有一个$last_event变量可以保存已经通过foreach的每个事件。循环中有一个if语句,用于确定$last_event与行中当前事件的日期是否相同。如果是,那么它将在不打印日期的情况下通过,如果不是,则打印出来。在循环结束之前,有$last_event的赋值,它指定当前传递的事件以进行下一次确定。这是我能解释的最简单的形式。

现在,如果您不想在打印出来时猜出类似的日期,那就是另一种情况。