2017-06-23 23 views
0

Hoffe, dieser Beitrag ist kein Duplikat, ich habe nach einer Lösung gesucht, aber ich bin wirklich fest, vielleicht jemand pass durch diese und hat eine Lösung.Array überprüfen, ob Datum in Array von Zeitraum Datumsbereich Füllwerte von letzten Array PHP

Ich habe eine Reihe von Array, die in ein Diagramm übergeben, muss der Wunsch-Diagramm alle Daten zeigen, auch wenn am gewünschten Tag nicht existiert Wert für ein Sub-Array-Daten.

Das ist mein Array:

$setData = array(
      '2017-06-21' => array(
       'gender1' => array(
        'value1' => 100, 
        'value2' => 100, 
        'value3' => 100, 
       ), 
       'gender2' => array(
        'value1' => 200, 
        'value2' => 200, 
        'value3' => 200, 
       ), 
       'gender3' => array(
        'value1' => 300, 
        'value2' => 300, 
        'value3' => 300, 
       ) 
      ), 
      '2017-06-22' => array(
       'gender1' => array(
        'value1' => 90, 
        'value2' => 90, 
        'value3' => 90, 
       ), 
       'gender3' => array(
        'value1' => 200, 
        'value2' => 200, 
        'value3' => 200, 
       ) 
      ), 
      '2017-06-23' => array(
       'gender2' => array(
        'value1' => 150, 
        'value2' => 150, 
        'value3' => 150, 
       ), 
       'gender3' => array(
        'value1' => 150, 
        'value2' => 150, 
        'value3' => 150, 
       ) 
      ), 
     ); 

auf diese Weise also am 22. Tag in der Grafik wird die Linien- oder Balkenstapel für Geschlecht 2 und auf 23 für Geschlecht 1, was ich brauche, ist zu halten dissapear der Linien- oder Balkenstapel selbst wenn in 22 ich habe keine Werte für Geschlecht 2 und auf 23 Werten für Geschlecht 1

das sollte gewünschte Ergebnis sein:

$setDataNeed = array(
      '2017-06-21' => array(
       'gender1' => array(
        'value1' => 100, 
        'value2' => 100, 
        'value3' => 100, 
       ), 
       'gender2' => array(
        'value1' => 200, 
        'value2' => 200, 
        'value3' => 200, 
       ), 
       'gender3' => array(
        'value1' => 300, 
        'value2' => 300, 
        'value3' => 300, 
       ) 
      ), 
      '2017-06-22' => array(
       'gender1' => array(
        'value1' => 90, 
        'value2' => 90, 
        'value3' => 90, 
       ), 
       /* Keep values from gender2 from 21 date*/ 
       'gender2' => array(
        'value1' => 200, 
        'value2' => 200, 
        'value3' => 200, 
       ), 
       'gender3' => array(
        'value1' => 200, 
        'value2' => 200, 
        'value3' => 200, 
       ) 
      ), 
      '2017-06-23' => array(
       /* Keep values for gender1 from 22 date*/ 
       'gender1' => array(
        'value1' => 90, 
        'value2' => 90, 
        'value3' => 90, 
       ), 
       'gender2' => array(
        'value1' => 150, 
        'value2' => 150, 
        'value3' => 150, 
       ), 
       'gender3' => array(
        'value1' => 150, 
        'value2' => 150, 
        'value3' => 150, 
       ) 
      ), 
     ); 

Antwort

1

einfach vorherige Zeile erinnern und setzen sie sie, wenn n erledigt.

function prepare($aIn) { 
    $aRes = array(); 
    $prev = array(); 
    $keys = array('gender1', 'gender2', 'gender3',); 

    foreach ($aIn as $row) { 
     foreach ($keys as $k) { 
      if (!isset($row[$k]) && isset($prev[$k])) { 
       $row[$k] = $prev[$k]; 
      } 
     } 

     $aRes[] = $row; 
     $prev = $row; 
    } 

    return $aRes; 
} 
+0

Hey Ivan, danke für dich teilen, gibt es eine Möglichkeit, die Schlüssel zu halten?, Ich habe die Funktion versucht und die Schlüssel hinzugefügt und das Ergebnis ist das gleiche aus dem ersten Array. – ndAR

+0

Wenn Sie Speicherschlüssel aus dem Array benötigen, verwenden Sie array_keys(). Oder brauchst du etwas anderes? Ich verstehe nicht, was du willst. –

0

Andere Weise, dies zu tun. Es behält die Schlüssel.

$previousValue = null; 
foreach($setData as $key=>$value){; 
    if($previousValue) { 
     $setData[$key] = array_replace_recursive($previousValue,$value); 
    } 
    $previousValue = $value;  
} 
print_r($setData); 
Verwandte Themen