如何使用空值初始化多维关联数组

时间:2017-10-14 15:52:38

标签: php arrays multidimensional-array associative-array

我想创建和初始化一个多维数组,其中包含第二维的已知可能键,但没有值。

此数组将存储event_ids(动态填充),并为每个event_id存储具有四个不同计数(也动态填充)的数组。

我想要创建的结构

Array
(
    [0] => Array  =================> This index will be the event_id 
        (
            [invitation_not_sent_count] => 
            [no_response_yet_count] => 
            [will_not_attend_count] => 
            [will_attend_count] => 
        )
)

到目前为止我做了什么?

$DataArray = array();
$DataArray[] = array('invitation_not_sent_count' => '',
                                        'no_response_yet_count' => '',
                                        'will_not_attend_count' => '',
                                        'will_attend_count' => '');

在循环内部,我正在动态填充数据,如:

$DataArray[$result->getId()]['no_response_yet_count'] = $NRCount;

我得到的是:

Array
(
[0] => Array
    (
        [invitation_not_sent_count] => 
        [no_response_yet_count] => 
        [will_not_attend_count] => 
        [will_attend_count] => 
    )

[18569] => Array
    (
        [no_response_yet_count] => 2
    )

[18571] => Array
    (
        [no_response_yet_count] => 1
    )

我想要的是,如果迭代中没有值,则其条目应为初始化时定义的空。因此,如果除no_response_yet_count之外的数据中的所有其他计数都为空,则数组应为:

预期输出

Array
(
[18569] => Array
    (
        [invitation_not_sent_count] => 
        [no_response_yet_count] => 2
        [will_not_attend_count] => 
        [will_attend_count] =>
    )

[18571] => Array
    (
        [invitation_not_sent_count] => 
        [no_response_yet_count] => 1
        [will_not_attend_count] => 
        [will_attend_count] =>
    )

1 个答案:

答案 0 :(得分:0)

我通常在那时采用映射函数:

function pre_map(&$row) {
    $row = array
    (
        'invitation_not_sent_count' => '',
        'no_response_yet_count' => '',
        'will_not_attend_count' => '',
        'will_attend_count' => ''
    );
}

然后在while / for循环中:

{
    $id = $result->getId();
    if (!isset($DataArray[$id])) { pre_map($DataArray[$id]); }
    $DataArray[$id]['no_response_yet_count'] = $NRCount;
}

if (!isset($DataArray[$id]))是为了确保它不会消除相同的索引行,以防您碰巧在同一个ID上重新循环。因此,它只会映射一次,然后再也不会再循环。

还有一些其他的单行快捷方式,甚至可能使用array_map(),但我正在展示长版本,以获得完全的灵活性以防万一。