填写缺少的数组

时间:2017-10-25 06:07:15

标签: php arrays loops

我有一个包含1到13个句点的数组。有时数组不包含所有句点的数据,我需要填写缺少的数据,例如

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 ) 
)

对于这种情况,我需要运行一个php循环,用0 y值填充缺少的前6个句点。我尝试了各种各样的循环,但没有快乐,我认为我的思想已经变得混乱。有人有任何建议吗?

5 个答案:

答案 0 :(得分:3)

使用标准数组方法可以获得良好的语义。例如:

<?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);

演示:https://3v4l.org/2fDYW

答案 1 :(得分:0)

首先用值为0的所有句点填充所需的整个数组。

然后,对于数据数组中的每个句点,使用句点ID更新数组中正确位置的句点值。

希望它有所帮助...

答案 2 :(得分:0)

你可以试试这个

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];
   }
}

答案 3 :(得分:0)

这可以解决您的问题:

让我们说$ p_array是你的数组,包含1到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);

答案 4 :(得分:0)

假设您的$arrayperiod排序。

您可以创建一个复制内容的新阵列或$array,并为缺失的时段设置新内容。

$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
    }
}