用缺失的年份按升序填充PHP中的数组

飞机

具有以下数组数组:

array(2) {
  [0]=>
  array(4) {
    [0]=>
    array(2) {
      [0]=>
      string(4) "2012"
      [1]=>
      float(1)
    }
    [1]=>
    array(2) {
      [0]=>
      string(4) "2013"
      [1]=>
      float(1)
    }
    [2]=>
    array(2) {
      [0]=>
      string(4) "2014"
      [1]=>
      float(2)
    }
    [3]=>
    array(2) {
      [0]=>
      string(4) "2015"
      [1]=>
      float(1)
    }
  }
  [1]=>
  array(7) {
    [0]=>
    array(2) {
      [0]=>
      string(4) "2008"
      [1]=>
      float(2)
    }
    [1]=>
    array(2) {
      [0]=>
      string(4) "2009"
      [1]=>
      float(7)
    }
    [2]=>
    array(2) {
      [0]=>
      string(4) "2010"
      [1]=>
      float(2)
    }
    [3]=>
    array(2) {
      [0]=>
      string(4) "2011"
      [1]=>
      float(2)
    } // <---------------------------- HERE I MISS YEAR 2012
    [4]=>
    array(2) {
      [0]=>
      string(4) "2013"
      [1]=>
      float(19)
    }
    [5]=>
    array(2) {
      [0]=>
      string(4) "2014"
      [1]=>
      float(8)
    }
    [6]=>
    array(2) {
      [0]=>
      string(4) "2015"
      [1]=>
      float(8)
    }
  }
}

第一个数组是正确的,因为它有顺序为年递增顺序,2012201320142015如您所见,第二个数组有问题,您可能会错过年份2012

我想,以填补所有的失踪多年的升序(并添加浮动0),在本例中是将值推2012入阵列(第二阵列),具有float的价值0

   array(2) {
      [0]=>
      string(4) "2012"
      [1]=>
      float(0)
    }

所以我想要的输出将是:

array(2) {
  [0]=>
  array(4) {
    [0]=>
    array(2) {
      [0]=>
      string(4) "2012"
      [1]=>
      float(1)
    }
    [1]=>
    array(2) {
      [0]=>
      string(4) "2013"
      [1]=>
      float(1)
    }
    [2]=>
    array(2) {
      [0]=>
      string(4) "2014"
      [1]=>
      float(2)
    }
    [3]=>
    array(2) {
      [0]=>
      string(4) "2015"
      [1]=>
      float(1)
    }
  }
  [1]=>
  array(7) {
    [0]=>
    array(2) {
      [0]=>
      string(4) "2008"
      [1]=>
      float(2)
    }
    [1]=>
    array(2) {
      [0]=>
      string(4) "2009"
      [1]=>
      float(7)
    }
    [2]=>
    array(2) {
      [0]=>
      string(4) "2010"
      [1]=>
      float(2)
    }
    [3]=>
    array(2) {
      [0]=>
      string(4) "2011"
      [1]=>
      float(2)
    }
    [4]=>
    array(2) {
      [0]=>
      string(4) "2012"
      [1]=>
      float(0)
    }
    [5]=>
    array(2) {
      [0]=>
      string(4) "2013"
      [1]=>
      float(19)
    }
    [6]=>
    array(2) {
      [0]=>
      string(4) "2014"
      [1]=>
      float(8)
    }
    [7]=>
    array(2) {
      [0]=>
      string(4) "2015"
      [1]=>
      float(8)
    }
  }
}

请注意,这是一个“简单”的示例,因为它只错过了一年,但是我想拥有一个“通用”脚本,可以对其进行相同的修复。按升序填充错过的年份,并将浮点数设为0。

2008200920132014,填写200820092010,。2011201220132014

这是我的尝试,是arraySeries数组的名称。我被困在必须进行更改的部分上。

foreach ($arraySeries as $value) {
    $i = 0;
    foreach ($value as $innerArray) {
        if ($i == 0) {
                $firstYear = $innerArray[0];
            }
        $year = $innerArray[0];
        if ($year == $firstYear) {
            echo "It's the same year, ok";
        } else {
            echo "Missing year! - Fill value";
            // Do stuff
        }
        var_dump($year);
        $i++;
        $firstYear++;
    }
    echo "<br>";
    $firstYear = null;
}

任何其他更优雅/性能更好的解决方案都欢迎。

PS:我正在使用PHP 5.2(这不是我的机器,所以我无法更新版本)

提前致谢。

凯文

我突然想到的第一件事就是从数据中获得年份(缺少年份)。

然后,获取最小值和最大值,以创建完整的年份范围。

比较收集的数据,以便您知道缺少的年份。在此之后,直接添加缺少的年份,然后进行常规排序:

foreach($array as &$first) {
    $years = array_map('reset', $first); // get all years first
    $min = min($years); // min and max
    $max = max($years);
    $year_range = range($min, $max); // create complete years
    $missing_years = array_diff($year_range, $years); // compare both all years to complete range to get the missing
    foreach($missing_years as $y) {
        $first[] = [$y, (float) 0]; // push missing year
    }
    // sort by date
    usort($first, function($a, $b){
        return $a[0] - $b[0];
    });
}

注意:如果您的PHP不支持匿名函数,只需在外部创建一个简单函数并在中使用它usort

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何从PHP中的Key按升序对数组进行排序?

来自分类Dev

用升序将另一个数组的项填充到数组中(Javascript)

来自分类Dev

用缺失值填充哈希数组

来自分类Dev

在熊猫中按ID填充缺失值

来自分类Dev

PHP 图表 - 用值填充缺失的日期

来自分类Dev

用PHP中的for循环填充数组

来自分类Dev

用R中的特定列填充缺失值的缺失日期

来自分类Dev

用“ for”循环填充PHP数组

来自分类Dev

用codeigniter中select multiple的内容填充PHP数组

来自分类Dev

被排序?检查数组是否在Java中按升序或降序排序

来自分类Dev

使用C中的指针按升序对数组进行排序

来自分类Dev

用几列填充数据框中的缺失日期

来自分类Dev

用数据框中的零填充缺失的行

来自分类Dev

Ruby 数组按升序排列

来自分类Dev

将字符串转换为php中的数组,将其输出,然后按升序和降序输出

来自分类Dev

使用Zoo包中的as.yearmon()按年份和月份对df进行排序的缺失月份

来自分类Dev

用“缺失”行填充 csv

来自分类Dev

numpy 2d 数组使用 for 循环用升序数字序列填充它

来自分类Dev

用数组中的值填充动态数组

来自分类Dev

填充数据缺失的填充数组

来自分类Dev

按升序排列星期数和年份

来自分类Dev

PHP 用查询填充数组

来自分类Dev

按年份分组对象数组

来自分类Dev

用numpy数组中的随机替换缺失值

来自分类Dev

在PHP中填充数组

来自分类Dev

PHP排序数组升序

来自分类Dev

用Java中的对象填充数组

来自分类Dev

用数组中包含的信息填充矩阵

来自分类Dev

用EditText中的值填充数组