Многострочные операторы if - PullRequest
0 голосов
/ 04 июня 2019

Я проверяю около 20 переменных, как показано ниже, и мне было интересно, есть ли более быстрый способ (меньше строк), чтобы сделать то же самое:

if ($data1 == 1) {
  $res1 = "Yes";
} else {
  $res1 = "No";
}
if ($data2 == 1) {
  $res2 = "Yes";
} else {
  $res2 = "No";
}
if ($data3 == 1) {
  $res3 = "Yes";
} else {
  $res3 = "No";
}
etc..

Ответы [ 3 ]

4 голосов
/ 04 июня 2019

Есть несколько способов:

1) цикл foreach:

$array = [$data1, $data2, $data3];

foreach ($array as $key => $value)
{
    ${'res'. $key} = ($value == 1 ? 'yes' : 'no');
}

Хотя, как указал Qirel, это, вероятно, не лучшая вещь.Если вам нужно назвать новые значения $name. $x, то, вероятно, лучше использовать массив:

$array = [$data1, $data2, $data3];
$res = [];

foreach ($array as $key => $value)
{
    $res[$key] = ($value == 1 ? 'yes' : 'no');
}

2) функция:

function checkVal($value)
{
    return ($value == 1 ? 'yes' : 'no');
}

$res1 = checkVal($data1);

3) троичная - не обязательно не повторять код,но это короче:

$res1 = ($data1 == 1 ? 'yes' : 'no')
$res2 = ($data2 == 1 ? 'yes' : 'no')
$res3 = ($data3 == 1 ? 'yes' : 'no')
1 голос
/ 04 июня 2019

Это также должно работать -

// number of variables to check
$num = 3;
// Loop for checking all the variables as per naming convnetions followed
for ($i = 1; $i <= $num; $i++) {
    // set yes/no depending on the data set
    ${'res' . $i} = ${'data' . $i} == 1 ? 'yes' : 'no';
}
0 голосов
/ 04 июня 2019

Я не знаю контекст, но из того, что я вижу, я советую создать массив из $ data1, $ data2, $ dataN и зациклить все эти значения, чтобы создать другой массив со всеми проверками

$values = [$data1, $data2, $data3, $data4];
$responses = array_reduce($values, function ($a, $b) {
    $a[] = 1 === $b;

    return $a;
}, []);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...