2014-11-24 56 views
0

我在這裏有一個小混亂,我使用Crinsane使用laravel插件創建一個日曆,唯一的問題是顯示多個日期從我使用foreach循環從數據庫傳遞的值。基本結構是這樣的PHP對於每個循環返回一個值

$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); ?> 

當我運行這段代碼,它只是顯示上次事件的日期,我知道那是因爲它遍歷整個數據變量,但我怎樣才能讓它在遍歷$日期= > $ a-> eventname只?

+3

似乎你的'$ data'數組在循環中每次都被覆蓋。 – Rikesh 2014-11-24 13:07:57

+0

謝謝4幫助,是的我知道,我如何防止它被覆蓋,這是我的問題... – bobin56 2014-11-24 13:19:15

+0

我想要一個這樣的輸出$ data = array( 3 =>'event 1', 7 = >'event 2', );但到目前爲止只有事件2顯示... – bobin56 2014-11-24 13:36:14

回答

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混合到您的視圖一個偉大的方式排列,雖然;作爲一個建議,我會把邏輯創建$數據到你的控制器,並只在視圖中調用Calendar :: generate。

+0

感謝@chris的幫助:-)我在你的代碼中做了一些修改,因爲我得到了一些語法錯誤,我改變$ data = []爲$ data [] =「」和$ data [] = [$ date => $ a-> eventname];到$ data = array($ date => $ a-> eventname); ,當我運行它,仍然我從我的事件表中獲得最後一個值,是的,我同意你在視圖控制器混合,將改變這一點,再次感謝4幫助我和PLIZ C如果你能找到解決這個問題的方法,當我在循環內打印時,它將返回所有的值,但僅在最後一個值之外 – bobin56 2014-11-24 16:48:01

+0

@ bobin56 - 那麼你_did_將我的主要變更改回你所擁有的'$ data []';)我原以爲你在使用Laravel 4.2和PHP 5.4,所以我使用了短語數組語法。我剛剛使用長格式數組語法(['array()'而不是'[]'](http://php.net/manual/en/migration54.new-features.php)編輯我的文章) – 2014-11-24 16:58:33

+0

謝謝:-)它的工作原理... – bobin56 2014-11-25 08:36:54