PHP For each Loop 返回一个值


PHP For each Loop returns one value

我在这里遇到了一个小困惑,我正在使用 crinsane 的 laravel 插件创建一个日历,唯一的问题是使用 foreach 循环显示从数据库传递的值中的多个日期。基本结构是这样的

$data = array(
    3  => 'http://example.com/news/article/2006/03/',
    7  => 'http://example.com/news/article/2006/07/',
);
Calendar::generate(2006, 6, $data);

这将呈现压光机。但是我的数据值来自数据库。这是我的 foreach 循环

   @foreach ($events as $a)
       <?php  $string = $a->datebooked;
       $date = DateTime::createFromFormat("Y-m-d" ,$string);
       $date=$date->format("d");
       $date;?>
       <?php $data=array(
           $date=> $a->eventname,
         )?>
   @endforeach
 <?php echo Calendar::generate(date('Y'), date('n'), $data); ?>

当我运行此代码时,它只显示最后一个事件日期,我知道这是因为它循环遍历整个数据变量,但是我怎样才能让它循环通过 $date=> $a->eventname 仅?

在 for-each 循环之外,您不想覆盖$data,而是添加它。执行此操作的快速而肮脏的方法是在foreach循环之外定义一个$data数组,然后像这样附加到数组中

<?php
$data = array();
?>
@foreach ($events as $a)
   <?php
   $string = $a->datebooked;
   $date = DateTime::createFromFormat("Y-m-d", $string);
   $date = $date->format("d");
   $data[] = array($date => $a->eventname);
   ?>
@endforeach

不过,这不是将PHP混合到视图中的好方法;作为建议,我将创建$data的逻辑放入控制器中,并且仅在视图中调用Calendar::generation。