我有一个数组数组,其中第一个项是一个简单的标签数组,然后其余的值是第一个元素是日期编号的数组,第二个元素是那天的视图元素数。所以在我的吼叫示例中,第2天有163个视图,第5天有9个视图。
array (size=3)
0 =>
array (size=2)
0 => string 'Day' (length=3)
1 => string 'Pageviews' (length=9)
1 =>
array (size=2)
0 => string '2' (length=1)
1 => int 163
2 =>
array (size=2)
0 => string '5' (length=1)
1 => int 9
我想要的是为这个数组中没有出现的日子添加0个视图。因此,如果我想从1到18天的间隔开始,我怎么能创建一个每天都有我的观点的数组,以及那些不在我的第一个数组中的0个视图?
答案 0 :(得分:0)
我假设每个(数组键+ 1)是日期编号。如果是这样,你可以尝试这种方法:
$array = ... //your filled array
$existingDays = array();
$totalDays = 18;
for ($i = 1; $i <= $totalDays; $i++) {
$existingDays[$array[$i][0]] = true;
if (!array_key_exists($i, $existingDays)) {
$array[$i] = array( (string)($i+1), 0);
}
}
修改强>:
由于您不知道现有日期的列表,因此可以创建另一个数组$existingDays
并在每个循环步骤中使用正确的日期填充它。注意:
in_array()
函数遍历整个数组)$existingDays
之前将日期添加到同一循环中的if
数组中。单个天数至少与当前数组键相同(但通常更大),因此无法在意外检查$existingDays
但即可。答案 1 :(得分:0)
这段代码应该是你想要实现的技巧:
//storing the days present in the array
$days_present = array_column($input_array,0,0);
for($i=1; $i<32; $i++){
//push if days are not present in the input array
if(!array_key_exists($i, $day_present) )
array_push($input_array,array($i,0) );
}
答案 2 :(得分:0)
我已经想通了。下面的代码将按升序获得所有关联,默认值为0:
$existingArray = 'my existing array';
$existingDays = array_column($existingArray, 0);
$existingViews = array_column($existingArray, 1);
//I use this array to track relationships between days and views
$bindings = array_combine($existingDays, $existingViews);
$viewsData = array();
$viewsData[0] = array('Day', 'Pageviews');
for ($day = 1; $day <= 8; $day++) {
$viewsNumber = (isset($bindings[$day])) ? $bindings[$day] : 0;
$viewsData[] = array($day, $viewsNumber);
}
return $viewsData;