более чистый способ анализа данных - PullRequest
0 голосов
/ 03 октября 2019

У меня есть 9 флажков в форме, и я делаю следующее:

//names of $_POST checkboxes

$interests = array("energy","recycling","composting","electric","climate","gas",
"pesticides","water","other");
$ival=[];

if($_POST["energy"] === "on")$ival[0]=true;
else $ival[0]=false;

if($_POST["recycling"] === "on")$ival[1]=true;
else $ival[1]=false;

if($_POST["composting"] === "on")$ival[2]=true;
else $ival[2]=false;

if($_POST["electric"] === "on")$ival[3]=true;
else $ival[3]=false;

if($_POST["climate"] === "on")$ival[4]=true;
else $ival[4]=false;

if($_POST["gas"] === "on")$ival[5]=true;
else $ival[5]=false;

if($_POST["pesticides"] === "on")$ival[6]=true;
else $ival[6]=false;

if($_POST["water"] === "on")$ival[7]=true;
else $ival[7]=false;

if($_POST["other"] === "on")$ival[8]=true;
else $ival[8]=false;

for($i=0;$i<9;$i++){
    query ("insert into interest (usr,
                                  subject,
                                  value)
                                  values(?,?,?)",
                                  $usr,$interests[$i],$ival[$i]);

 }

Есть ли способ избежать всех этих операторов if?

1 Ответ

1 голос
/ 03 октября 2019

Вам не нужны if заявления. Результат сравнения - true или false, поэтому вы можете использовать его напрямую.

Вы можете использовать array_map() для создания массива вместо множества отдельных назначений.

$ival = array_map(function($interest) { return $_POST[$interest] === "on"; }, $interests);

Но вам не нужен массив $ival, вы можете перебрать $interests и выполнить там запросы.

foreach ($interests as $interest) {
    query("insert into interest (usr, subject, value) values (?, ?, ?)",
          $usr, $interest, $_POST[$interest] === "on");
}
...