【问题标题】:PHP For each Loop returns one valuePHP For each Loop 返回一个值
【发布时间】:2014-11-24 13:05:47
【问题描述】:

我在这里有点困惑,我正在使用 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 ?

【问题讨论】:

  • 似乎您的 $data 数组在您的循环中每次都会被覆盖。
  • 感谢 4 的帮助,是的,我知道,如何防止它被覆盖,这是我的问题...
  • 我想要这样的输出 $data = array( 3 => 'event 1', 7 => 'event 2', );但到目前为止,只有事件 2 正在显示...

标签: php laravel foreach


【解决方案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。

【讨论】:

  • 感谢@chris 的帮助 :-) 我对您的代码进行了一些更改,因为我遇到了一些语法错误,我将 $data=[] 更改为 $data[]="" 和 $data[ ] = [$date => $a->eventname];到 $data=array($date => $a->eventname); ,当我运行它时,我仍然从我的事件表中获得最后一个值,是的,我同意你的视图控制器混合,会改变它,再次感谢 4 帮助我,如果你能找到解决这个问题的方法,当我在循环内打印出来时,它返回所有值,但仅在最后一个值之外
  • @bobin56 - 你确实将我的主要更改改回了你所拥有的,$data[] ;) 我以为你使用的是 Laravel 4.2 和 PHP 5.4,所以我使用了速记数组语法。我刚刚使用长格式数组语法(array() instead of [])编辑了我的帖子
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-06-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-11-23
相关资源
最近更新 更多