2017-10-25 6 views
1

Ich habe ein Array, das Perioden von 1 enthält - 13. Manchmal ist das Array enthält keine Daten für alle Perioden und ich brauche in den Vermissten zu füllen, zum BeispielFüllen Sie fehlende Perioden Array

Array ( 
    [0] => Array ([period] => 7 [y] => 20) 
    [1] => Array ([period] => 8 [y] => 20.50) 
    [2] => Array ([period] => 9 [y] => 7020) 
    [3] => Array ([period] => 10 [y] => 6520) 
    [4] => Array ([period] => 11 [y] => 65920) 
    [5] => Array ([period] => 12 [y] => 62820) 
    [6] => Array ([period] => 13 [y] => 6120) 
) 

Für diesen Fall muss ich eine PHP-Schleife ausführen, um die fehlenden ersten 6 Punkte mit 0 y Werten zu füllen. Ich habe eine Vielzahl von Loops ausprobiert, aber ohne Freude, denke ich, dass mein Verstand verwirrt ist. Hat jemand irgendwelche Vorschläge?

+0

Post das erwartete Ergebnis – RomanPerekhrest

Antwort

3

versuchen Sie gute Semantik mit Verwendung der Standard-Array-Methoden erhalten können. Zum Beispiel:

<?php 
$in = [ 
    ['period' => 7, 'y' => 20], 
    ['period' => 8, 'y' => 20.50], 
    ['period' => 9, 'y' => 7020], 
    ['period' => 10, 'y' => 6520], 
    ['period' => 11, 'y' => 65920], 
    ['period' => 12, 'y' => 62820], 
    ['period' => 13, 'y' => 6120], 
]; 

// collect available periods 
$available = array_column($in, 'period'); 

// calculate missing periods 
$missing = array_diff(range(1, 13), $available); 

// transform missing to correct format 
$addition = array_map(function ($period) { return ['period' => $period, 'y' => 0]; }, $missing); 

// add missing to input 
$out = array_merge($in, $addition); 

// sort by period 
usort($out, function ($a, $b) { 
    return $a['period'] <=> $b['period']; 
}); 

// done 
print_r($out); 

Demo: https://3v4l.org/2fDYW

0

Start durch das gesamte Array füllen Sie mit einem Wert von 0.

dann für jeden Zeitraum, den Sie in Ihrer Datenmatrix erhalten alle Zeit benötigen, verwenden Sie die Zeit-ID den Wert der Zeit an der richtigen Stelle zu aktualisieren im Array.

Hoffe, es hilft ...

0

du

for ($i=1 $<=13, $i++) { 

    $exits = false; 
    foreach ($array as $key => $value) { 
     if ($value['period'] == $key) { 
      $exits = true; 
     } 
    } 
    if ($exits) { 
     $array[] = ['period' => $i , 'y' => 0]; 
    } 
} 
0

Dieses Ihr Problem lösen sollte:

sagen Let $ z_array ist Ihr Array, das Perioden von 1 enthält - 13.

// get all periods number that is not missed 
$not_missed_periods = array(); 
foreach ($p_array as $p_each) 
{ 
    $not_missed_periods[] = $p_each['period']; 
} 
// loop for checking all valid periods i.e 1-13 
for ($i=1; $i<=13; $i++) 
{ 
    // check if $i OR period is not in $not_missed_periods 
    if (!in_array($i, $not_missed_periods)) { 
     $p_array[] = array('period' => $i, 'y' => 0); 
    } 
} 
print_r($p_array); 
0

Unter der Annahme, Ihre $array ist nach period sortiert.

Sie können ein neues Array erstellen, das den Inhalt oder Ihre $array kopiert und einen neuen Inhalt für fehlende Zeiträume einstellt.

$new_array = []; 
for ($i = 1, $j = 0; $i <= 13; $i++) { 
    if ($array[$j]['period'] == $i) { 
     $new_array[] = $array[$j]; //copy contents 
     $j++; 
    } else { 
     $new_array[] = [ 'period' => $i, 'y' => 0 ]; // set new contents 
    } 
} 
Verwandte Themen