具有以下数组数组:
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)
}
}
}
第一个数组是正确的,因为它有顺序为年递增顺序,2012
,2013
,2014
和2015
。如您所见,第二个数组有问题,您可能会错过年份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。
2008
,2009
,2013
,2014
,填写2008
,2009
,2010
,。2011
,2012
,2013
,2014
。
这是我的尝试,是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] 删除。
我来说两句