Написал порядка полусотни if-ов для проверки и присваивания существования значений переменным вида
if (!$key1) $var1 = "нет данных";
else var1 = "Значение_1";
if (!$key2) $var1 = "нет данных";
else var2 = "Значение_2";
...
if (!$keу50) $var50 = "нет данных";
else var50 = "Значение50";
Т.е по умолчанию всем переменным присваивается значение "нет данных"
Насколько такие конструкции некрасивы (говнокод?) и как правильнее делать?
PS. keyN
предварительно достаю из базы, а varN
в дальнейшем уходит в массив.
Добавка: Прошу прощения, я не учел как оказалось важный момент:
Все имена переменных - как ключей, так и значений - уникальны и не поддаются цифровой "маркировкой". В реальности эти имена типа
$saper_resolution_key
, $desar_price_key
, $insment_rate_var
и тп. А значения к тому же ещё и не одинакового формата - где-то просто текст, где-то конкатенация с переменными, причём в разном порядке и наборах.
Поэтому формирование предварительного массива мне кажется ещё более проблемно, а последующая его обработка и вовсе запутает.
И по просьбам из коментариев привожу кусочек реального кода
if (rwmb_meta('deres-reser','',$post_id)==0) $deres_reser_var = "Нет";
else $deres_reser_var = "Да";
if (!rwmb_meta('ssumnal-minsumm','',$post_id)) $ssumnal_minsumm_var = "нет данных";
else $ssumnal_minsumm_var = rwmb_meta('ssumnal-minsumm','',$post_id)." руб";
if (!rwmb_meta('sader-age','',$post_id)) $sader_age_var = "нет данных";
else $sader_age_var = "От".rwmb_meta('sader-age','',$post_id)." лет";
if (!rwmb_meta('fasan-servise','',$post_id)) $fasan_servise_var = "нет данных";
else $fasan_servise_var = rwmb_meta('fasan-servise','',$post_id);
тут функция rwmb_meta('fasan-servise','',$post_id))
получает из базы значения поля с именем fasan-servise
А в дальнейшем из этих данных я составлю массив и передаю его в обработку
$arr = array ( $deres_reser_key => $deres_reser_var, $ssumnal_minsumm_key => $ssumnal_minsumm_var , $sader_age_key => $sader_age_var, $fasan_servise_key => $fasan_servise_var);
(В этом массиве на переменные ключей не обращайте внимания - в данном случае они не играют роль и я упростил для понимания логики их именований)
На самом деле есть не мало вариантов реализции подобного кода. Для приведенного в примере кода лучше использовать тернарный оператор:
$var1 = $key1 ? 'Значение1' : 'нет данных';
$var2 = $key2 ? 'Значение2' : 'нет данных';
$var3 = $key3 ? 'Значение3' : 'нет данных';
$var50 = $key50 ? 'Значение50' : 'нет данных';
Второй вариант, если уместно, положить всё в массив и обойти его циклом:
$keysArray = [$key1, $key2, $key3, $key50];
$valuesArray = [];
$i = 1;
foreach ($keysArray as $key) {
$valuesArray[] = $key ? 'Значение' . $i++ : 'нет данных';
}
В общем, способов избавиться от if-else достаточно.
// Функция вернет $value в случае успеха и $failValue - неудачи
function getValue($key, $value, $failValue='нет данных') {
return $key? $value: $failValue;
}
$var1 = getValue($key1, 'значение 1')
$var2 = getValue($key2, 'значение 2')
$var3 = getValue($key3, 'значение 3')
Да, если у вас много значений, то лучше использовать массивы для результата, ключей, правильных значений и неправильных, по необходимости
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Будьте добры подсказатьЯ хочу реализовать покупку товара с сайта,но не знаю как конкретно это делается