我有一个包含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个句点。我尝试了各种各样的循环,但没有快乐,我认为我的思想已经变得混乱。有人有任何建议吗?
答案 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);
答案 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)
假设您的$array
按period
排序。
您可以创建一个复制内容的新阵列或$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
}
}