Как упростить инициализацию значения массива - PullRequest
3 голосов
/ 02 марта 2010

Несколько раз в день я сталкиваюсь с проблемой, когда мне нужно динамически инициализировать переменные в многомерном массиве, чтобы 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 ]

1 голос
/ 02 марта 2010

Я задал тот же вопрос несколько месяцев назад и получил ряд хороших ответов.

В вашем случае, возможно, настроить универсальную функцию?

Что-то вроде:

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

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

параметр до того, как последний был членом, который нужно установить, и последнее значение (или что-то в этом роде, вы получите мой дрейф). Вы можете использовать func_get_args(), чтобы сохранить гибкость счетчика параметров.

0 голосов
/ 02 марта 2010

Ссылочная идея хороша, и ее легче написать if(isset($r)), чем то, что у вас есть сейчас:)

Тем не менее, единственное, что можно сделать с этой точки зрения, - это (и это ужасная практика, и я не рекомендую этого) отключить уведомления.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...