我每天都会遇到一个问题,我需要在多维数组中动态初始化变量,以防止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]
以减少冗余,但如果没有正确初始化它也会发出通知。
预先初始化数组是不可行的,因为不会使用所有键,我想避免使用不必要的键。
任何提示?
答案 0 :(得分:1)
在您的情况下,可能会设置一个通用函数吗?
类似的东西:
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))
比你现在更容易:)
那就是说,我头脑中唯一的另一种方式是(及其糟糕的做法,我不推荐它)关闭通知。