2016-04-28 4 views
-1

Ich versuche, eine ganze Zahl Serie zB I-Daten habenMake integer Serie in php

0 ,0 ,7 ,0 ,10, 25, 0, 0, 30, 0 

und ich möchte, um diese Serie machen, wie:

5 ,6 ,7 ,8 ,10, 25, 26, 27, 30, 31 

Grundsätzlich ich alle füllen wollen, dass die Nullen in einer Reihe.

Kann mir jemand helfen, ein Programm oder ein Algo zu machen, um dies zu berechnen.

Dank

+2

Warum wird der erste Wert als 5 festgelegt? Müssen irgendwelche anfänglichen Nullen mit dem ersten Nicht-Null-Wert verankert werden? – iainn

Antwort

-1

explode() Zeichenfolge. Gehen Sie durch das Array mit foreach. Wenn ein Nullwert auftritt, ersetzen Sie ihn durch $array[$index-1]+1.

+0

Ihr Ansatz behandelt nicht die Fälle, in denen das Array mit Null (en) beginnt. –

6

Ein Problem, das für eine array_map mit einer anonymen Funktion schreit. :)

$data = [0, 0, 7, 0, 10, 25, 0, 0, 30, 0]; 

$prev = 0; 
// Wherever we have a zero, if we've already seen a non-zero number, replace it 
// with the previous number plus one. 
$data = array_map(function($v) use(&$prev) { 
    $v = ($v ?: ($prev ? ++$prev : 0)); $prev = $v; return $v; }, $data); 
// To handle the zeros before the first non-zero number, reverse the array, 
// replace any zeros with the previous number minus one, then reverse it again. 
$data = array_reverse(array_map(function($v) use(&$prev) { 
    $v = ($v ?: --$prev); $prev = $v; return $v; }, array_reverse($data))); 

var_dump($data); 
/** 
array (size=10) 
    0 => int 5 
    1 => int 6 
    2 => int 7 
    3 => int 8 
    4 => int 10 
    5 => int 25 
    6 => int 26 
    7 => int 27 
    8 => int 30 
    9 => int 31 
*/