#php
Как правильно построить большие условия проверки? Например код: if ($test['status'] == 1) { if ($test['id'] == 2) { if ($test['user'] == 4) { if ($test['auth'] == true) { if ($test['map'] == 'russia') { if ($test['name'] == 'john') { $result = 1; } else { $result = 2; } } else { $result = 2; } } else { $result = 2; } } else { $result = 2; } } else { $result = 2; } } else { $result = 0; } Выглядит не очень, читается плохо и если условий больше то код превращается в ёлку. Как правильно формировать массивные условия проверки и для каждого присваивать некий результат, то есть избегать OR условий?
Ответы
Ответ 1
$check = [ 'status' => ['v' => 1, 'false' => 0], 'id' => ['v' => 2, 'false' => 2], 'user' => ['v' => 4, 'false' => 2], 'auth' => ['v' => true, 'false' => 2], 'map' => ['v' => 'russia', 'false' => 2], 'name' => ['v' => 'john', 'false' => 2, 'true' => 1], ]; $doCheck = function($test) use ($check){ foreach($check as $field => $opts){ if( $test[$field] !== $opts['v']) return $opts['false']; } return $opts['true']; }; можно еще вместо строковых ключей 'true/false' использовать сами занчения true/false или индексы 0\1, и в итоге массив будет вида 'name' => [2, 1, 'v' => 'jonh'] но это будет менее понятно и наглядно.Ответ 2
https://ideone.com/S2wqPb 1, id => 2, user => 7]); Стоило бы сделать массив объектов или словарей вместо двумерного массива, но мне лень.Ответ 3
Как вариант if ($test['status'] == 1) { if ( $test['id'] == 2 && $test['user'] == 4 && $test['auth'] && $test['map'] === 'russia' && $test['name'] === 'john' ) { $result = 1; } else { $result = 2; } } else { $result = 0; } Второй вариант function getRes($test) { if ($test['status'] != 1) { return 0; } if ( $test['id'] == 2 && $test['user'] == 4 && $test['auth'] && $test['map'] === 'russia' && $test['name'] === 'john' ) { return 1; } return 2 } $result = getRes($test);
Комментариев нет:
Отправить комментарий