简化嵌套的 If...Else 语句;灵活阵列

Simplifying a nested If...Else statement; flexible array

所以首先,这是代码:

  $greens = $_REQUEST['greens'];
  $squash = $_REQUEST['squash'];
  $tomatoes = $_REQUEST['tomatoes'];

  $single = $greens xor $squash xor $tomatoes;


  if (isset($greens,$squash,$tomatoes)) {

    $array = [$greens,$squash,$tomatoes];
    $product = implode(', ',$array);

  } else if (isset($greens,$squash)) {

    $array = [$greens,$squash];
    $product = implode(', ',$array);

  } else if (isset($greens,$tomatoes)) {

    $array = [$greens,$tomatoes];
    $product = implode(', ',$array);

  } else if (isset($squash,$tomatoes)) {

    $array = [$squash,$tomatoes];
    $product = implode(', ',$array);

  } else if (isset($single)) {

    $product = $single;

  } else {

    $product = $_REQUEST['vendor_product'];

  }

这是 php 文件的一部分,用于提交供应商注册表。如果供应商 selects 'produce' 作为他们的产品类型,则会出现一组复选框选项,并且需要 select 至少一个选项。根据选项集,值 selected 将在一个字段中集中提交到数据库中。它们在数据库中的显示方式示例如下:'Greens, Squash & Zucchini''Greens, Squash & Zucchini, Tomatoes''Greens' 等。如果多个选项为 [=23=,则插入 ', ' ]ed.

上面的代码有效,但想知道是否有办法简化它,因为我很可能会为用户添加更多选项 select。还有,即使每个条件都有多个真结果,三元运算符还能用吗?我对这个运算符的理解还很陌生。

$names = ['greens', 'squash', 'tomatoes'];

$array = [];
foreach ($names as $name) {
    if (isset($_REQUEST[$name])) {
        $array[] = $_REQUEST[$name];
    }
}

$product = implode(', ',$array);

if (count($array) == 0) {
    $product = $_REQUEST['vendor_product'];
}

简化此代码并同时使其更灵活的最佳方法是更改​​表单本身并使用数组。

而不是

<input type="checkbox" name="green" value="Greens" />
<input type="checkbox" name="squash" value="Squash & Zucchini" />
<input type="checkbox" name="tomatoes" value="Tomatoes" />

你将拥有

<input type="checkbox" name="produce[]" value="Greens" />
<input type="checkbox" name="produce[]" value="Squash & Zucchini" />
<input type="checkbox" name="produce[]" value="Tomatoes" />

和 PHP 代码:

if (empty($_REQUEST['produce'])) {
    $product = $_REQUEST['vendor_product'];
} else {
    $product = implode(', ', $_REQUEST['produce']);
}

或使用三元运算符:

$product = empty($_REQUEST['produce']) ? implode(', ', $_REQUEST['produce']) : $_REQUEST['vendor_product'];