Меня попросили написать небольшой PHP-скрипт, который берет некоторый ввод POST из нескольких выпадающих списков, которые дают некоторые выбираемые критерии, и в конце выплевывает одну или несколько строковых переменных, содержащих уникальные коды.
Имена переменных имеют форму $ thingPlaceType, и каждая из них уникальна. Выпадающие списки позволяют выбрать:
- либо одна "вещь", либо все "вещи" вместе
- либо одно "место", либо все "места" вместе
- либо один «тип», либо все «типы» вместе
Я не могу понять, как выбрать эти коды, не прибегая к вложенным операторам переключения, где я делаю
switch($_POST['thing'])
{
case "thing1":
switch($_POST['place'])
{
case "place1":
switch($_POST['type'])
{
case "type1":
$output = $thing1Place1Type1;
case "type2":
$output = $thing1Place1Type2;
case "alltypes":
$output = $thing1Place1Type1.$thing1Place1Type2.$thing1PlaceType3;
}
case "place2":
...
case "allplaces":
...
}
case "thing2":
switch($_POST['place'])
{
case "place1":
switch($_POST['type'])
{
case "type1":
$output = $thing1Place1Type1;
...
...
...
}
Похоже, что код превращается в Антипаттерн Стрелка. Я думаю, что мог бы что-то сделать, используя многомерные массивы или, может быть, один массив, в котором я сопоставляю значения с ключами. Но я чувствую, что он хватается за соломинку и что-то мне не хватает. Не пора ли превратить строки в настоящие объекты со свойствами?
$thing1place1
,$thing1place2
и т. Д. Очень естественно сопоставляются, например, с$things_places = array( 1 => array( 1 => 'some place', 2 => 'another place' ), 2 => ... );
(или вы также можете использовать явные имена ключей, например'places' => array( 1 => ... )
). Перейдите к более разумной модели данных, и вы обнаружите, что с подобными проблемами намного легче справиться, если их вообще не существует. - person Jordan Running   schedule 25.05.2012