检查变量是否已设置

6
什么是检查POST变量是否设置的最有效方法?
例如,我从“页面1”收集了10个变量,如果它们被设置了,我想将这些数据存储在“页面2”上。如果没有,则我想分配“不可用”。
我目前使用的是“if!empty”,但是似乎必须有一种更简单/更有效的方法,我对php很新,所以任何建议都被赞赏。
示例代码:
if (!empty($_POST["book"])) {
    $book= $_POST['book'];    
}else{  
    $book= 'not available';
}

if (!empty($_POST["author"])) {
    $author = $_POST['author'];    
}else{  
    $author= 'not available';
}

if (!empty($_POST["subtitle"])) {
    $subtitle= $_POST['subtitle'];   
}else{  
    $subtitle= 'not available';
}

etc...
etc...
etc...

你知道isset函数吗?但请注意,一个变量可以同时被设置为空:$a=""是空的,但仍被设置了。 - Serpes
@Serpes 是的,不过原理是一样的,不是吗? - jonboy
1
他们会给你不同的结果,就像我之前说过的那样。 - Serpes
$book = isset($_POST['book']) && !empty($_POST['book']) ? $_POST['book'] : '不可用'; - J A
你应该能够自己进行性能测试,以找出其效率如何。 - Jay Blanchard
@JA isset && !empty 是多余的废话。只需使用其中之一即可。 - deceze
2个回答

9

使用循环和变量变量。

$fields = array('author', 'book', 'subtitle', ....);
foreach($fields as $field) {
   if (isset($_POST[$field])) {
      $$field = $_POST[$field]; // variable variable - ugly, but gets the job done
   } else {
      $$field = 'not available';
   }
}

因为你有$fields数组,所以你限制了循环的预期条目,从而避免了来自错误请求的潜在问题。+1 - TecBrat
1
是的,但OP说的是“SET”,而不是“非空”。empty()是一个愚蠢的函数。empty(0)为真 - 这使得任何处理库存/货币/数字的代码容易受到错误的负面影响。它应该被称为“is_castable_to_false()”。 - Marc B
我认为 OP 应该再等一下,而不是将他的 $book$author 设为空字符串 =) - vp_arth
我认为这正是我需要的@Marc B-我会测试并回复你,谢谢+1 - jonboy
我宁愿在这里使用数组(而不是$$),但这可能只是我的个人偏好。 - raina77ow

0
通常我使用这个帮助函数:
function defa($array, $key, $default){
    if(isset($array[$key])){
        return $array[$key];
    }else{
        return $default;
    }
}

使用方法:

$book = defa($_POST, 'book', 'Not available');

或者,如果您只使用 $_POST 数组,您可以简化代码:

function post_defa($key, $default){
    if(isset($_POST[$key])){
        return $_POST[$key];
    }else{
        return $default;
    }
}

使用方法:

$book = post_defa('book', 'Not available');

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接