Как правильно построить большие условия проверки?
Например код:
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 условий?
$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']
но это будет менее понятно и наглядно.
https://ideone.com/S2wqPb
<?php
function test($obj) {
$checks = [
['status', 1, 0],
['id', 2, 2],
['user', 4, 3],
['auth', true, 4],
['map', 'russia', 5],
['name', 'john', 6],
];
foreach ($checks as $check) {
if ($obj[$check[0]] != $check[1]) {
return $check[2];
}
}
return 1;
}
echo test([status => 1, id => 2, user => 7]);
Стоило бы сделать массив объектов или словарей вместо двумерного массива, но мне лень.
Как вариант
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);
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Мой вопрос заключается в том, чтоб из цикла foreach вывести переменную marks в массив dataPoints в отметки здесь
меня интересует следующий момент, я могу вызвать метод сразу после создания экземпляра класса таким образом:
уже второй день голову ломаю как решить данную проблемуПоиск к сожалению ничего не дает (может ищу неправильно)