Упростить код в php

213
22 сентября 2017, 21:00

Можно ли сделать этот код более маленьким:

'rowOptions'=>function($model){
    $dun="";
    if(date("Y-m-d",strtotime($model->data_okon. "-9 days")) == date("Y-m-d"))
    {
        $dun='success';
    }
    if(date("Y-m-d",strtotime($model->data_okon. "-8 days")) == date("Y-m-d"))
    {
        $dun='success';
    }
    if(date("Y-m-d",strtotime($model->data_okon. "-7 days")) == date("Y-m-d"))
    {
        $dun='success';
    }
    if(date("Y-m-d",strtotime($model->data_okon. "-6 days")) == date("Y-m-d"))
    {
        $dun='success';
    }
    if(date("Y-m-d",strtotime($model->data_okon. "-5 days")) == date("Y-m-d"))
    {
        $dun='success';
    }
    if(date("Y-m-d",strtotime($model->data_okon. "-4 days")) == date("Y-m-d"))
    {
        $dun='warning';
    }
    if(date("Y-m-d",strtotime($model->data_okon. "-3 days")) == date("Y-m-d"))
    {
        $dun='warning';
    }
    if(date("Y-m-d",strtotime($model->data_okon. "-2 days")) == date("Y-m-d"))
    {
        $dun='danger';
    }
    if(date("Y-m-d",strtotime($model->data_okon. "-1 days")) == date("Y-m-d"))
    {
        $dun='danger';
    }
    if(date("Y-m-d",strtotime($model->data_okon. "-0 days")) == date("Y-m-d"))
    {
        $dun='danger';
    }
    return [
        'class'=>$dun,
    ];
},
Answer 1

Используй сравнение дат, приведенных к одному виду (это работает)

'rowOptions'=>function($model){
    $dun = "success";
    if( date("Y-m-d", strtotime($model->data_okon. "-4 days")) <=  date("Y-m-d") ){
        $dun = 'warning';
    }
    if( date("Y-m-d", strtotime($model->data_okon. "-2 days")) <=  date("Y-m-d") ){
        $dun = 'danger';
    }
    return [
        'class' => $dun,
    ];
},

Если очень важно, чтобы $dun по умолчанию был пустым, добавь еще одно условие

Answer 2

Одно из решений:

$sub = СравниваемаяДата - датаИзБазы;
if($sub < 9 && $sub >= 4){
    $dun='success';
}
if($sub < 4 && $sub >= 2){
    $dun='warning';
}
if($sub < 2){
    $dun='danger';
}
Answer 3
'rowOptions' => function($model) {
    $dun = "";
    for($i = 9; $i <= 0; $i--) {
        if(date("Y-m-d", strtotime($model->data_okon."-".$i." days")) == date("Y-m-d")) {
            switch($i) {
                case 9: case 8: case 7: case 6: case 5:
                    $dun = 'success'; break;
                case 4: case 3:
                    $dun = 'warning'; break;
                case 2: case 1: case 0:
                    $dun = 'danger'; break;
                default: break;
            }
        }
    }
    return ['class' => $dun];
},
Answer 4

И еще короче )

foreach ( [9 => 'success',4 => 'warning',2 => 'danger'] as $day => $action) 
    $dun = date('Y-m-d', strtotime($model->data_okon. "-{$day} days")) <= date('Y-m-d') ? $action : "";
Answer 5

Ещё короче

'rowOptions'=>function($model){
    $dun="";
    for ($i=9; $i<=0; $i--){
        if(date("Y-m-d",strtotime($model->data_okon. "-".$i." days")) == date("Y-m-d"))
        {
            if ($i<=5) $dun = 'success';
            else if ($i<=3) $dun = 'warning';
            else $dun = 'danger';
            break;
        }
    }
    return [
        'class'=>$dun,
    ];
},
READ ALSO
Передача переменной в модальное окно

Передача переменной в модальное окно

Здравствуйте! Есть две категории баннеры и слайдеры, и форма в виде модального окна с помощью которой мы добавляем элемент либо в одну либо...

275
Реализация конструктора тестов на joomla

Реализация конструктора тестов на joomla

Для диплома предложили создать систему для профориентационного отделаВкратце это конструктор тестов

213
отправить письмо php

отправить письмо php

как отправить письмо на почту в php, если почта указано в таблице human в столбце e_mail, но вот письмо должно отправляться по условию что у него заканчивается...

178
Отправка файла средствами CURL + POST + CURLAUTH_BASIC

Отправка файла средствами CURL + POST + CURLAUTH_BASIC

Есть на сервере файл получатель get_postphp:

287