2016-12-23 6 views
1

に適用されます。毎年、私はこのコードしまった配列

/** 
* Transforms field value to readable text for listing. 
* 
* @param string $fieldName 
* @param Entity_Topic $entity 
* @return string 
*/ 
public function presenter($fieldName, *** $entity) { 
    $years = range(2014, 2020); 
    if ('dateFrom' == $fieldName) { 
     foreach($years as $year) { 
     $list = array(
      $year.'-01-01' => 'Leden '.$year, 
      $year.'-02-01' => 'Únor '.$year, 
      $year.'-03-01' => 'Březen '.$year, 
      $year.'-04-01' => 'Duben '.$year, 
      $year.'-05-01' => 'Květen '.$year, 
      $year.'-06-01' => 'Červen '.$year, 
      $year.'-07-01' => 'Červenec '.$year, 
      $year.'-08-01' => 'Srpen '.$year, 
      $year.'-09-01' => 'Září '.$year, 
      $year.'-10-01' => 'Říjen '.$year, 
      $year.'-11-01' => 'Listopad '.$year, 
      $year.'-12-01' => 'Prosinec '.$year, 
     ); 
     return $list[$entity->getDateFrom()]; 
     } 
    } 
    return ''; 
} 

このコードは、2014年のデータのみを示し、他の年はちょうどnullです。任意のアイデアが正しく動作するようにする方法は他の年も表示できますか?

if ('dateFrom' == $fieldName) { 
      foreach($years as $year) { 
      $list = array(
        *** 
      ); 
      } 
    return $list[$entity->getDateFrom()]; 
} 

これは、あなたが一つの問題を修正しましたが、1つの以上の問題がまだ残ってます。..

+2

あなた 'return'は' foreach'ループ内である(これは最初のループの後にあることを意味します - 。データが返されますループが次に続行されません値)。 'foreach'ループ内でデータを構築し、' foreach(..){..} 'ブロックの後に**データを'返す 'べきです。 – Dekel

+0

コメントのコードを理解することは不可能です。 – Dekel

+0

'foreach'ループの各繰り返しで' $ list'を上書きしています。 –

答えて

1

が機能していません。 foreachループごとに$listを上書きしています。 $list[] = array(...を実行しても、この配列から適切なデータをフェッチすることが最終目的であるため、問題は解決しません。そこで、以下の方法であなたのpresenter()方法を変更、

public function presenter($fieldName, $entity) { 
    $years = range(2014, 2020); 
    if ('dateFrom' == $fieldName) { 
     $years = range(2014, 2020); 
     $months = array('Leden', 'Únor', 'Březen', 'Duben', 'Květen', 'Červen', 'Červenec', 'Srpen', 'Září', 'Říjen', 'Listopad', 'Prosinec'); 
     $list = array(); 
     foreach($years as $year){ 
      for($i = 1; $i <= 12; ++$i){ 
       $list[$year . '-' . $i . '-01'] = $months[$i - 1] . ' ' . $year; 
      } 
     } 
     return $list[$entity->getDateFrom()]; 
    } 
    return ''; 
} 
+0

for($ i = 01; $ i <= 12; ++ $ i){ $ list [$ year。 ' - ' $ i。 '-01'] = $ months [$ i - 1]。 ''。 $ year; }これが動作する方法です。ありがとうございました:) –

+0

@ElmarBabayev私は '$ {= 1; ...}もうまくいくと思いますが、私は自分の答えを更新しました –

+0

あなたは正しいです。 1〜9のような数ヶ月間、私はdateFormatを 'yy-mm-dd'から 'yy-m-dd'に変更しなければなりませんでした。 –

関連する問題