2017-12-23 9 views
1

日、月、年の間に隙間なく常に昇順に配列したいと考えています。だから、最後に、私はこのようなもの、例えば2012, 2013, 2014, 2015, 2016を持っていたいと思っています。配列に日付/モン/年が追加されていない場合

Example arrays: 
$data = [2012, 2013, 2015, 2017] 
$anzeige = [1, 5, 8, 3] 

Want I want to have at the end: 
$data = [2012, 2013, 2014, 2015, 2016, 2017] 
$anzeige = [1, 5, 0, 8, 0, 3] 

時には、数日、数ヶ月または数年間のデータがありません。だから、私にはギャップがある。私はこのギャップを閉じて、翌日、月、または年を配列に追加し、昇順のままにします。

これは、これまでの私のコードです:

private function fixDates($daten, $anzahl){ 
$tmpArrayDaten = array(); 
$tmpArrayAnzahl = array(); 

$this->logger->lwrite("Fix Data"); 

for ($i=0; $i < sizeof($daten) - 1 ; $i++) { 
    if(($i + 1) == sizeof($daten)){ 
     return array(array("daten" => $daten), array("anzahl" => $anzahl)); 
    } 

    if(!(($daten[$i] + 1) == ($daten[$i + 1]))){ 

     $this->logger->lwrite(($daten[$i] + 1) . " != " . ($daten[$i + 1])); 

     for($j = 0; $j < $i; $j++){ 
      $tmpArrayDaten[] = $daten[$j]; 
      $tmpArrayAnzahl[] = $anzahl[$j]; 
     } 

     $tmpArrayDaten[] = $daten[$i] + 1; 
     $tmpArrayAnzahl[] = 0; 

     for($j = $i; $j < (sizeof($daten) + 1); $j++){ 
      $tmpArrayDaten[] = $daten[$j]; 
      $tmpArrayAnzahl[] = $anzahl[$j]; 
     } 

     $this->logger->lwrite(var_export($tmpArrayDaten)); 
     $this->logger->lwrite(var_export($tmpArrayAnzahl)); 

     $this->fixDates($tmpArrayDaten, $tmpArrayAnzahl); 
    } 
} 

return array(array("daten" => $daten), array("anzahl" => $anzahl)); 

}

$anzahl配列は$daten配列内の同じインデックスで日、月または年の値が含まれています。そして、いいえ、私は最終的に1つの配列を作成してjson_encode()経由でJavaScriptに送るつもりであるため、それらを1つの配列に入れたくないです。

しかし、私のコードで私の失敗を見つけることができません...それは決して停止しません。ギャップがある場合、「プレースホルダ」を追加することは止まらない...

これを修正する方法がありますか?

種類は、私は2つの配列の構造を描い少し苦労しています

+1

について。入力がどのように見えるかを知るためにスニペットを含めることは可能でしょうか? –

+0

質問を更新しました – Don

+0

ありがとうございました!入力が何であるかを知る大きな助け。私はまだ少し混乱している。私はそのdaten店舗の年を取得しますが、どのようなanzeigeの格納ですか?その月か日ですか?あなたは日、月、年を言及しましたが、私は3つのうち2つだけを見ています。あるいは、私はそれを正しく見ていないかもしれません。 –

答えて

1
$data = [2012, 2013, 2016, 2017, 2020]; 
$anzeige = [1, 5, 8, 3, 10]; 

list($new_data, $new_clicks) = fillGaps($data, $anzeige); 

print_r($new_data); 
print_r($new_clicks); 

function fillGaps($data, $clicks) { 

    // assume the first element is right 
    $fixed_data = array($data[0]); 
    $fixed_clicks = array($clicks[0]); 

    for ($i = 1; $i < count($data); $i++) { 

     // if there is a gap, fill it (add 0s to corresponding array) 
     while (end($fixed_data)+1 != $data[$i]) { 
      $fixed_data[] = end($fixed_data) + 1; 
      $fixed_clicks[] = 0; 
     } 

     // add the data which exists after gap 
     $fixed_data[] = $data[$i]; 
     $fixed_clicks[] = $clicks[$i]; 
    } 

    return array($fixed_data, $fixed_clicks); 
} 
+0

ありがとうございました! – Don

関連する問題