Php 是否可以从表单中筛选select值数组?

Php 是否可以从表单中筛选select值数组?,php,Php,假设我有这个表格: <form method="post"> <select name="s[]" multiple="multiple"> <option value="12345678">One</option> <option value="a7e6b65e">Two</option> <option value="ad2445f7">Three</option>

假设我有这个表格:

<form method="post">
  <select name="s[]" multiple="multiple">
    <option value="12345678">One</option>
    <option value="a7e6b65e">Two</option>
    <option value="ad2445f7">Three</option>
    <option value="998d64fe">Four</option>
  </select>
  <input type="submit" value="GO">
</form>

有更简单的方法吗?

您应该已经在数组中提供了所有可能的选项值。 只需验证在post中检索到的选项是否在数组中定义即可

if (!in_array($o, $options)) {
    //Throw some validation error here
}
是,请参见阵列过滤器:

在PHP5.4中,您可以

$s=$_POST['s']; 
if (!$s || !is_array($s) 
   $s=array();
else 
   $s=array_filter($s, function ($value)  { return preg_match('/regex/',$value); });  

多亏了Bram和b7kich,他们都给了我一部分我将使用的解决方案,因为过滤器函数在这里似乎没有帮助

有一个可能值列表的想法很好(doh!),通过查看
array.*
函数,我发现
array.\u intersect
,它可以过滤掉任何“无效”值

$valid = array('12345678','a7e6b65e','ad24d5f7','998d64fe');
if (!isset($_POST['s']) || !($s = $_POST['s']) || !is_array($s))
  $s_clean = array();
else 
  $s_clean = array_intersect($s, $valid);
$valid = array('12345678','a7e6b65e','ad24d5f7','998d64fe');
if (!isset($_POST['s']) || !($s = $_POST['s']) || !is_array($s))
  $s_clean = array();
else 
  $s_clean = array_intersect($s, $valid);