如何在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')));
它非常简单且可重复使用。在函数中使用全局变量不是一个好做法。谢谢你的回答,伙计,是的,我有点累了。这才是真正可以做到的。