填写数组中的空白

时间:2012-09-30 09:49:44

标签: php

我有一个数组,我想显示一年中的所有日子或一年中的每个月,即使数据为0,是否可以查看数组内部并填写不存在的内容?

我从mysql表返回的数据不显示0 - 下面的详细信息

Show values even if empty

所以,下面显示了一年中的几个月和计数,我想填写那些不存在的月份,即'Feb'=> '0'..'Sep'=> '0'..'Dec'=> '0'

数组示例:

$data = array(
    'Jan' => 12,
    'Mar' => 10,
    'Apr' => 7,
    'May' => 80,
    'Jun' => 67,
    'Jul' => 45,
    'Aug' => 66,
    'Oct' => 23,
    'Nov' => 78,
);

3 个答案:

答案 0 :(得分:2)

使用array_fill_keys创建“已知的良好起点”,然后array_merge或添加数组以合并您的数据。

示例:

$data = array_fill_keys(array('Jan', 'Feb', 'etc'), 0);
$data = array('Feb' => 40) + $data;

警告:结果不会按月份排序。

答案 1 :(得分:2)

首先创建一个空白数组,其默认值为0,而不是将此数组合并到原始数组。

$data = array(
    'Jan' => 0,  
    'Feb' => 0,
    'Mar' => 0,
    'Apr' => 0,
    'May' => 0,
    'Jun' => 0,
    'Jul' => 0,
    'Aug' => 0,
    'Sep' => 0,
    'Oct' => 0,
    'Nov' => 0,
    'Dec' => 0;
);

$data2 = array(
    'Jan' => 12,
    'Mar' => 10,
    'Apr' => 7,
    'May' => 80,
    'Jun' => 67,
    'Jul' => 45,
    'Aug' => 66,
    'Oct' => 23,
    'Nov' => 78,
);

$newarray=array_merge($data, $data2);

答案 2 :(得分:0)

正如the previous question中已经指出的那样,您需要为月份名称创建某种“查找表”。如果您不在数据库中执行此操作,则需要在PHP中执行此操作。这样的“表”可以是月份名称的数组:

$months = array(
    'Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 
    'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'
);

然后,您可以迭代月份名称,如果结果中存在,则选择数字 ,您将采用默认值:

$default = 0;
foreach ($months as $month) {
    $value = isset($data[$month]) ? $data[$month] : $default;
    # $value now contains the month value
    ...
}

这应该可行。

请注意数据库返回的月份名称必须与您在$months数组中使用的月份名称相同。