Помогите избавиться от повторений в if в PHP/Perl

143
10 марта 2019, 08:30

Есть большой if, нужно избавится от повторений и более грамотно и красиво оформить условие, но совсем не понимаю как это сделать.

    if ($contr_type == 0) {
        if ($contr_doc_id != 4) {
            if ($contr_doc_id == 1 && ($contr_ser_doc =~ /\D/g || $contr_num_doc =~ /\D/g)) {
                if (!$contr_bday) {
                    $personal_data = '1. паспорт и дата рождения';
                } else {
                    $personal_data = '2. паспорт';
                }
            } else {
                if ($contr_ser_doc && $contr_num_doc && $contr_bday) {
                    $personal_data = 'Ок';
                } elsif ((!$contr_ser_doc || !$contr_num_doc) && !$contr_bday) {
                    $personal_data = '1. паспорт и дата рождения';
                } elsif ((!$contr_ser_doc || !$contr_num_doc) && $contr_bday) {
                    $personal_data = '2. паспорт';
                } elsif (($contr_ser_doc && $contr_num_doc) && !$contr_bday) {
                    $personal_data = '3. дата рождения';
                }
            }
        } else {
            if (($contr_ser_doc || $contr_num_doc) && $contr_bday) {
                $personal_data = 'ОК';
            } elsif (!$contr_ser_doc && !$contr_num_doc && !$contr_bday) {
                $personal_data = '1. паспорт и дата рождения';
            } elsif ((!$contr_ser_doc && !$contr_num_doc) && $contr_bday) {
                $personal_data = '2. паспорт';
            } elsif (($contr_ser_doc || $contr_num_doc) && !$contr_bday) {
                $personal_data = '3. дата рождения';
            }
        }
    }
Answer 1

Можно отмечать отдельными битами отсутствие того или иного признака, а потом по их совокупности подготовить нужную фразу. Как нибудь так:

my $data=0;
if ($contr_type == 0) {
        if($contr_doc_id == 1) {
                $data=1 if($contr_ser_doc =~ /\D/g || $contr_num_doc =~ /\D/g);
        } else {
                $data=1 if(!$contr_ser_doc || !$contr_num_doc);
        }
} else {
        $data=1 if(!$contr_ser_doc && !$contr_num_doc);
}
$data |= 2 if(!$contr_bday);
$personal_data = {
        0 => 'Ok',
        1 => '2. паспорт',
        2 => '3. дата рождения',
        3 => '1. паспорт и дата рождения'
}->{$data};
READ ALSO
Поиск js в таблице mysql php

Поиск js в таблице mysql php

Подскажите пожалуйста, есть код который ищет данные в таблице

180
Каталог на вордпресс

Каталог на вордпресс

Подскажите, как создать такой каталог, как по приведённой ссылке? http://wwwhanwha

127
Загрузка фотографий в БД

Загрузка фотографий в БД

Есть такая функция, для загрузки фотографий в БД с помощью пхп, как это все переписать на JS, чтобы все происходило без перезагрузки страницы?

165
.htaccess как убрать index.html из URL

.htaccess как убрать index.html из URL

htaccess как убрать index

160