开发者

How to simplify array value initialization

开发者 https://www.devze.com 2022-12-21 21:05 出处:网络
Several times a day I run into a problem where I need to dynamically initialize variables in a multidimensional array to prevent PHP throwing a notice because of an uninitialized variable.

Several times a day I run into a problem where I need to dynamically initialize variables in a multidimensional array to prevent PHP throwing a notice because of an uninitialized variable.

Code fragments like this are very common:

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

Or:

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

That look开发者_JS百科s awful and is a pain to write, also makes maintaining quite hard as these fragments are abundant. Does anyone have any ideas how I could simplify such a task? I thought of creating a reference $r to $profile[$year][$month][$weekday][$hour] to reduce redundancy, but it will also throw a notice if not initialized properly.

Initializing the array beforehand isn't feasible as not all keys will be used and I'd like to avoid unnecessary keys.

Any tips?


I asked the same question a few months back and got a number of good answers.

In your case, maybe set up a generic function?

Something like:

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

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

the parameter before last being the member to be set, and the last the value (or something like that, you get my drift.) You could use func_get_args() to keep the parameter count flexible.


The reference idea is good, and its easier to write if(isset($r)) than what you have right now :)

That said, the only other way around this off the top of my head is (and its terrible practice and I don't recommend it) turn off notices.

0

精彩评论

暂无评论...
验证码 换一张
取 消