Самый эффективный и безопасный способ работы с большим количеством переменных $ _REQUEST в php - PullRequest
1 голос
/ 26 января 2010

У меня есть форма, которая отправляет большое количество входных данных ...

<input type="hidden" name="searchTag_happy" value="0" />
<input type="hidden" name="searchTag_sad" value="0" />
<input type="hidden" name="searchTag_ambivalent" value="0" />
etc
.
.
.

Атрибутами значения для этих входов могут быть «0» или «1».

Я хотел бы использовать эту информацию для создания массива "searchTags", который содержит любые атрибуты, значения которых установлены в "1".

Мне интересно, какой самый эффективный и безопасный метод для решения этой проблемы в php. В настоящее время у меня есть длинный список утверждений типа if ...

if ($_REQUEST['searchTag_happy']) $searchTagArray[] = "happy";
if ($_REQUEST['searchTag_sad']) $searchTagArray[] = "sad";
if ($_REQUEST['searchTag_ambivalent']) $searchTagArray[] = "ambivalent";
etc
.
.
.

Но это кажется очень многословным. Есть ли лучшая альтернатива?

Заранее спасибо за помощь.

Ответы [ 2 ]

2 голосов
/ 26 января 2010
foreach($_REQUEST as $k=>$req)
{
   if(strpos($k,"searchTag_")!==false && $req)
   {
       $searchTagArray[]=$req;
   }
}

Таким образом, вы перебираете массив REQUEST и получаете только значения с ключом, который содержит «searchTag_» и со значением = 1

0 голосов
/ 26 января 2010

Mck89 почти прав - для получения необходимого массива:

foreach($_REQUEST as $k=>$req)
{
   if(strpos($k,"searchTag_")!==false && $req)
   {
       $searchTagArray[]=substr($k,10);
   }
}

Но если учесть, что нумерация массива не имеет значения, то это скорее означает, что результирующая структура данных может быть не оптимизирована - лучшее решение может быть:

       $searchTagArray[substr($k,10)]=1;

Или просто используйте array_filter () для возврата ненулевых значений без перевода ключей.

С

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...