如何简化数组值初始化

时间:2010-03-02 12:38:01

标签: php arrays initialization

我每天都会遇到一个问题,我需要在多维数组中动态初始化变量,以防止PHP因为未初始化的变量而引发通知。

这样的代码片段很常见:

if(!isset($profile[$year][$month][$weekday][$hour])) {
    $profile[$year][$month][$weekday][$hour] = 0;
}
$profile[$year][$month][$weekday][$hour] += $load;

或者:

$profile[$year][$month][$weekday][$hour] 
    = isset($profile[$year][$month][$weekday][$hour]) 
    ? $profile[$year][$month][$weekday][$hour] + $load
    : $load;

看起来很糟糕,写作很痛苦,因为这些片段很丰富,所以也很难保持。有没有人有任何想法如何简化这样的任务?我考虑过创建一个引用$r$profile[$year][$month][$weekday][$hour]以减少冗余,但如果没有正确初始化它也会发出通知。

预先初始化数组是不可行的,因为不会使用所有键,我想避免使用不必要的键。

任何提示?

2 个答案:

答案 0 :(得分:1)

几个月前我问the same question并得到了许多好的答案。

在您的情况下,可能会设置一个通用函数吗?

类似的东西:

set_array_member (&$profile, $year, $month, $weekday, $hour, 0);

$result = get_array_member (&$profile, $year, $month, $weekday, $hour);

在最后一个成为要设置的成员之前的参数,以及最后一个值(或类似的东西,你得到我的漂移。)你可以使用func_get_args()来保持参数计数的灵活性。

答案 1 :(得分:0)

参考想法很好,写起来if(isset($r))比你现在更容易:)

那就是说,我头脑中唯一的另一种方式是(及其糟糕的做法,我不推荐它)关闭通知。