Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/flash/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在PHP中生成更长的isset()语句?_Php_If Statement - Fatal编程技术网

如何在PHP中生成更长的isset()语句?

如何在PHP中生成更长的isset()语句?,php,if-statement,Php,If Statement,今天我有一个有趣的问题。假设我有一个表单字段数组: array('field1', 'field2', 'field3'); 我基本上希望生成一个if语句,检查提供的所有字段是否都存在 比如说: function ($array){ $stm = ''; foreach($array as $key){ $stm .= 'isset($_POST['.$key.']) && '; } if (rtrim($stm, ' &&

今天我有一个有趣的问题。假设我有一个表单字段数组:

array('field1', 'field2', 'field3');
我基本上希望生成一个if语句,检查提供的所有字段是否都存在

比如说:

function ($array){
   $stm = '';
   foreach($array as $key){
      $stm .= 'isset($_POST['.$key.']) && ';
   }
   if (rtrim($stm, ' && ')){
      echo 'Fields are exists.';
} }


上述函数的问题在于,它将创建的语句作为字符串而不是变量,因此它始终存在。有没有什么方法可以生成类似这样的东西,这样就行了?

您可以做的是检查数组键是否是通过使用变量名来设置的,例如

$keyName = "field1";

if ( isset($_POST[$keyName]) === true ) { /* ... */ }

上述示例可以在foreach循环中实现。

只需执行
isset
并计数:

function ($array){
  $count = 0;
  foreach($array as $key){
    if (isset($_POST[$key]) $count++;
    else // you can already exit here...
  }
  if (count($array) === $count){
    echo 'All fields exist.';
  }
}

你想得不对。如果我理解正确,您有一个值数组,也是
POST
键,您需要检查它们是否都已设置。在这种情况下,我会这样做:

function isset_multiple($array){
    foreach($array as $post_key){
        if(!isset($_POST[$post_key])) // if one of them is not set, return false
            return false;
    }
    return true; // none of the foreach loops returned false, so all must be set
}
试试这个

function arrayHasKeys(array $array, array $keys)
{
    return !((bool) array_diff_key($array, $keys));
}

var_dump(arrayHasKeys($_POST, array('field1', 'field2', 'field3')));

它非常简单且可重复使用。在函数中使用全局变量不是一个好做法。

谢谢你的回答,伙计,是的,我有点累了。这才是真正可以做到的。