Упрощение вложенного оператора If … Else; гибкий массив

Итак, во-первых, вот код:

  $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-файла для отправки формы регистрации поставщика. Если поставщик выбирает «продукт» в качестве своего типа продукта, появляется набор опций флажка, и необходимо выбрать хотя бы один вариант. В зависимости от набора опций выбранные значения будут совместно представлены в базе данных в одном поле. Примеры того, как они будут просматриваться в базе данных: 'Greens, Squash & Zucchini', 'Greens, Squash & Zucchini, Tomatoes' а также 'Greens'и т. д. где ', ' вставляется, если выбрано более одного параметра.

Приведенный выше код работает, но хотелось бы знать, есть ли способ упростить это, поскольку я, скорее всего, добавлю больше опций для выбора пользователя. Кроме того, хотя для каждого условия имеется несколько истинных результатов, можно ли по-прежнему использовать троичный оператор? Я все еще новичок в понимании этого оператора.

1

Решение

$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'];
}
2

Другие решения

Лучший способ упростить этот код и одновременно сделать его более гибким — это изменить саму форму и использовать массив.

Вместо

<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'];
0

По вопросам рекламы [email protected]