在php中生成整数系列

在php中生成整数系列,php,algorithm,Php,Algorithm,我正在尝试制作一个整数系列,例如我有数据 0 ,0 ,7 ,0 ,10, 25, 0, 0, 30, 0 我想把这个系列做为: 5 ,6 ,7 ,8 ,10, 25, 26, 27, 30, 31 基本上,我想填充一系列中的所有零 有人能帮我做一个程序或算法来计算这个吗 谢谢你的字符串。使用foreach遍历数组。遇到零值时,将其替换为$array[$index-1]+1一个需要使用匿名函数的数组映射的问题。:) 为什么第一个值设置为5?是否必须将任何初始零定位到第一个非零值?您的方法不处理

我正在尝试制作一个整数系列,例如我有数据

0 ,0 ,7 ,0 ,10, 25, 0, 0, 30, 0
我想把这个系列做为:

5 ,6 ,7 ,8 ,10, 25, 26, 27, 30, 31
基本上,我想填充一系列中的所有零

有人能帮我做一个程序或算法来计算这个吗


谢谢你的字符串。使用
foreach
遍历数组。遇到零值时,将其替换为
$array[$index-1]+1

一个需要使用匿名函数的
数组映射的问题。:)


为什么第一个值设置为5?是否必须将任何初始零定位到第一个非零值?您的方法不处理数组以零开始的情况。
$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
 */