1

Так прежде всего, вот код:Упрощение вложенного If ... Else statement; гибкий массив

$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' и т. Д., Где ', ' вставляется, если выбрано несколько опций.

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

+0

'php's' массивы по дизайну гибкие. –

ответ

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

Примечание для себя: просмотрите структуры управления, прежде чем задавать такие вопросы: p Спасибо – tylerptmusic

0

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

Вместо

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