PageUp
@PageUp
Default

Как задать ключи по умолчанию, если они цифирные, не используя циклы?

Здравствуйте, всем доброго времени суток!

Суть такова, есть переменные вида $a_data[45] к примеру.

Устанавливаются они путем explode(), но часто установка значений имеет условия. И если оно не выполнено, explode() пропускается и соответственно $a_data[] остается пустым. Но в коде по умолчанию в разных его местах идет условие на проверку по типу:

if($a_data[45] == 200)

или сразу какое-либо выражение с этой переменной по типу:

$prem = ($a_data[45] + 1345)*100;

И если $a_data[45] не был назначен изначально, так как explode() был пропущен в ходе выполнения условия, то PHP ругается:

Undefined array key 45

Попробовал избежать этого, изначально поместив назначение по умолчанию, задав ключи в циклах:

for($k = 0; $k< 100; $k++){$a_data[$k]=0;} 
for($k = 0; $k< 100; $k++){$b_data[$k]=0;} 
for($k = 0; $k< 100; $k++){$c_data[$k]=0;} 
for($k = 0; $k< 100; $k++){$d_data[$k]=0;} 

unset($k);


Но это прям ужасный костыль, который нагружает систему и занимает дополнительное время на обработку. Столько разных циклов, только что бы избежать Warning от PHP.

Пробовал разные методы, назначения по умолчанию, но все они упираются обычно в то, что ключи имеют именные названия, но тут все ключи цифирные, и соответственно key 45 будет и у $a_data[45] и у $c_data[45], но их значения могут сильно отличаться.

Ну и вот вопрос, можно ли как-то коротко, элегантно и с наименьшей нагрузкой заменить этот ужас

for($k = 0; $k< 100; $k++){$a_data[$k]=0;} ;
for($k = 0; $k< 100; $k++){$b_data[$k]=0;} ; 
for($k = 0; $k< 100; $k++){$c_data[$k]=0;} ; 
for($k = 0; $k< 100; $k++){$d_data[$k]=0;} ; 

unset($k);


Каким-то более быстрым и правильным методом?

Начальная задача такова: нужно, что бы Warning пропали, но не методом его отключения, а что бы все ключи по умолчанию принимали какое-то значение "" или 0.

А в ходе выполнения кода, уже это значение будет переназначаться, если будет такой момент. Если не будет, то переменная с ключом будет не пустой.
  • Вопрос задан
  • 77 просмотров
Решения вопроса 1
iMedved2009
@iMedved2009
Не люблю людей
$a_data = array_merge($a_data, array_fill(0, 100, 0));

В $a_data будут лежать данные - пропущенные будут 0.

Однако - то что вы пишете - это полный УЖАС. КЛИНИКА. КРОВЬ ИЗ ГЛАЗ. По этому выкиньте из головы варнинги и напишите что вы нахрен изначально пытаетесь сделать - аля пользователь делает то-то, я получаю на вход то-то, должен выдать это - у меня сильное подозрение что вам предложат миллион вариантов нормального подхода.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
toxa82
@toxa82
array_pad или array_fill вам в помощь.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы