Есть кусок кода написанный мною, отрабатывает правильно, вместе с тем есть ощущение что можно написать лучше, подскажите пожалуйста как написать лучше если это возможно.
if(isset($filter_status) && !isset($filter_language)){
if($this->getMkTime($item->created_at) >= $from && $this->getMkTime($item->created_at)<=$to && $item->order_status == $filter_status){
$data['orders'][] = $item;
}
}elseif(!isset($filter_status) && isset($filter_language)){
if($this->getMkTime($item->created_at) >= $from && $this->getMkTime($item->created_at)<=$to && $item->lang == $filter_language){
$data['orders'][] = $item;
}
}elseif(isset($filter_status) && isset($filter_language)){
if($this->getMkTime($item->created_at) >= $from && $this->getMkTime($item->created_at)<=$to && $item->order_status == $filter_status && $item->lang == $filter_language){
$data['orders'][] = $item;
}
}else{
if($this->getMkTime($item->created_at) >= $from && $this->getMkTime($item->created_at)<=$to){
$data['orders'][] = $item;
}
}
Ну эстетичнее было бы вынести условия
$this->getMkTime($item->created_at) >= $from && $this->getMkTime($item->created_at)<=$to
В отдельную переменную,
Плюс isset($filter_status)
как отдельную переменную и isset($filter_language)
как отдельную переменную.
Была бы проверка типа if (a&b) elseif(a&!b)
, а саму структуру проверок можно сделать как:
if(a){
if(b){}
else{}
}
else{
if(b)
else{}
}
Но это вкусовщина же!
На эту тему прочитайте 10-11 главы "Совершенный код" (с) Стив Макконнелл
Почему у Вас для всех условий одинаковый вывод я не понимаю, но основной затык в читаемости, я бы сделал так. Кода больше, но прочитать легче.
И еще у Вас недоработка в структуре If в этой части условия $this->getMkTime($item->created_at) >= $from && $this->getMkTime($item->created_at)<=$to
Это условие всегда одинаково и его можно вынести на самый верх
$filterLanguage = isset($filter_language) ? $filter_language : null;
$filterStatus = isset($filter_status) ? $filter_status : null;
$itemCreatedTime = $this->getMkTime($item->created_at);
$filterSearchFromTime = $from;
$filterSearchToTime = $to;
$searchByStatus = ($filterStatus !== null);
$searchByLanguage = ($filterLanguage !== null);
$itemTimeMatchFilterTime = ($itemCreatedTime >= $filterSearchFromTime && $itemCreatedTime <= $filterSearchToTime);
$itemStatusMatchFilter = ($item->order_status == $filter_status);
$itemLanguageMatchFilter = ($item->lang == $filter_language);
if ($itemTimeMatchFilterTime) {
if ($searchByStatus && !$searchByLanguage && $itemStatusMatchFilter)
$data['orders'][] = $item;
else if (!$searchByStatus && $searchByLanguage && $itemLanguageMatchFilter)
$data['orders'][] = $item;
else if ($searchByStatus && $searchByLanguage && $itemStatusMatchFilter && $itemLanguageMatchFilter)
$data['orders'][] = $item;
else
$data['orders'][] = $item;
}
P.S. А вообще у Вас вся логика сводится к
$itemCreatedTime = $this->getMkTime($item->created_at);
$filterSearchFromTime = $from;
$filterSearchToTime = $to;
$itemTimeMatchFilterTime = ($itemCreatedTime >= $filterSearchFromTime && $itemCreatedTime <= $filterSearchToTime);
if ($itemTimeMatchFilterTime) {
$data['orders'][] = $item;
}
То есть фильтры Статус и Язык бесполезны, так как результат от них не зависит. Не думаю, что это именно то, чего вы хотели
Ну это сугубо моя мысль:
$gt_time = $this->getMkTime($item->created_at);
$ords = $item->order_status;
$lang = $item->lang;
if ( ($gt_time >= $from && $gt_time <= $to && $ords == $filter_status) || ($gt_time >= $from && $gt_time <= $to && $lang == $filter_language) || ($gt_time >= $from && $gt_time<=$to && $ords == $filter_status && $lang == $filter_language) ) {
$data['orders'][] = $item;
} elseif ($gt_time >= $from && $gt_time <= $to) {
$data['orders'][] = $item;
}
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
Какие существуют виды рекламных бордов и как выбрать подходящий?
Суть кода в том, что при наличии определнного кода на странице например "view_plugin(1)", он должен замениться на данные полученные из базы misqlНо...
не могу понять почему ничего не выводитсяЕсть объявление, есть вызов с параметром
Подскажите с примеромИмеется страничка на ней я считываю значение переменной если пользователь пришел первый раз и кладу это значение в $_COOKIE
В приложении есть кнопка выход? Как сделать, чтобы при нажатии на нее программа завершалась?