我在这里有一个小小的困惑,我正在使用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 =&gt; $ a-&gt;仅限事件名称?
答案 0 :(得分:1)
在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 :: generate。