PHP从foreach语句中排除特定变量值

PHP从foreach语句中排除特定变量值,php,foreach,Php,Foreach,我试图从表单中排除必填字段。目前,整个数组的付款都会针对每个语句执行此操作。我正在努力使字段extra、extra2和extra3不被要求。如果字符串为空,则可以将其设置为null或定义为任意字符串。这就是我目前拥有的: foreach($p as $key => $value) { $value = trim($value); if($value == '') { $keyName = preg_replace('/([A-Z])/', " $1", $k

我试图从表单中排除必填字段。目前,整个数组的付款都会针对每个语句执行此操作。我正在努力使字段extra、extra2和extra3不被要求。如果字符串为空,则可以将其设置为null或定义为任意字符串。这就是我目前拥有的:

  foreach($p as $key => $value) {
    $value = trim($value);
    if($value == '') {
      $keyName = preg_replace('/([A-Z])/', " $1", $key);
      $this->_errors['Payment ' . $keyName] = __('Payment ','cart66') . $keyName . __(' required','cart66');
      $this->_jqErrors[] = "payment-$key";
    }
这是我尝试过的,但没有用:

 foreach($p as $key => $value) {
    $value = trim($value);
    if($value == '' && $p != 'extra' || 'extra2' || 'extra3') {
      $keyName = preg_replace('/([A-Z])/', " $1", $key);
      $this->_errors['Payment ' . $keyName] = __('Payment ','cart66') . $keyName . __(' required','cart66');
      $this->_jqErrors[] = "payment-$key";
    }
else if ($p['extra'] == '') {
 $_p['extra'] = NULL; 
}
else if ($p['extra2'] == '') {
 $_p['extra2'] = NULL; 
}
else if ($p['extra3'] == '') {
 $_p['extra3'] = NULL; 
}
}


这是我的语法,不是吗?数据库本身被设置为接受null,并且不是主要的或唯一的。

一个好方法就是在循环的顶部进行检查,如果您在一个应该被排除的字段中,则继续

$exclude = array('field1', 'field2', ...);
foreach ($p as $key => $value)
{
    if (in_array($key, $exclude)) { continue; }

    // your code... 
}

相反,它排除了所有我想排除的字段,但我完全可以从这里处理它。非常感谢你。这是Benjamin提供的数组_diff的另一种方法吗?是的,他建议您在循环之前从数组中删除不需要的元素,然后(如果必要)重新插入它们。如果你有相当大的数组,那么这样做可能会带来一些性能上的好处,但是对于典型的输入数组,差异应该可以忽略不计,所以请使用可读性和可维护性最好的代码。我应该在if条件中加上“!”吗?我不知道@LuísAlmeida。这取决于你想要什么。