2009-11-16 44 views

回答

4

如何使用in_arrayarray_map,的组合,例如:

// array of possible parameters that can be passed by the client 
$keys = array('username','password'); 

// this will store the names of the ones that are not present 
$missing = array(); 

foreach($keys as $key) { 
    if(!in_array($key, $_POST)) { 
     $missing[] = $key; 
    } 
} 

$nullOffsets = array_map("is_null", $_POST); 

echo 'Printing missing params:<br />'; 
print_r($missing); 
echo 'Printing null existing params:<br />'; 
print_r($nullOffsets); 
+0

这并不检查应该是有,但不存在摆在首位,这大概就是为什么OP使用'isset()函数数组项',而不是'空()' – Lukman 2009-11-16 10:42:19

+0

@Lukman - 感谢您的评论,我编辑了解决该问题的答案。 – karim79 2009-11-16 10:56:50

+0

这不起作用,因为您正在循环$ _POST而不是$键。你只是得到了一个意外的密钥列表 – 2009-11-16 10:59:30

0

如果你有一个数组变量(不只是使用请求或交阵列),你可以遍历他们调用isset()功能。根据你当前的代码是什么,这可能是'更好'。

0

用户输入检查很麻烦,但它是一个必要的罪恶。

我个人更喜欢不使用$_GET$_POST,而不是将需要的内容复制到我自己的变量中进行处理。

在我的PHP文件的顶部,我一直与我想从$_GET$_POST

复制值的名称的数组,这就增加了:

// the following array needs to be modified when you change your input specs 
$inputAllowed = array("name", "title", "company"); 
$input = array(); 
foreach($inputAllowed as $key) 
    if(array_key_exists($key, $_POST)) 
     $input[$key] = $_POST[$key]; 
    else 
     $input[$key] = ""; 

它很容易增加一个“is_null”检查在那里与处理,以防万一不应该为空。或者你可以先让循环完成,然后遍历$输入

+1

如果任何指定的参数未发布,将生成通知 – 2009-11-16 15:19:08

+0

为真。对不起,干编了。固定array_key_exists – nash 2009-11-16 15:29:31

+0

我会使用unset而不是将其设置为'“”' – 2012-05-26 18:16:49

0

你可以尝试将数组包装在一个对象中。

class ArrayWrapper { 
    private $data; 
    public function __get($var) { 
    if (!isset($this->data[$var])) { 
     return false; 
    } 
    else { 
     return $this->data[$var]; 
    } 
    } 
    public function __construct($a) { 
    $this->data = $a; 
    } 
} 

$a = array('test' => 1); 

$aw = new ArrayWrapper($a); 

if ($aw->test != false) { 
    echo "test: ".$aw->test; 
} 
if ($aw->foo != false) { 
    echo "foo: ".$aw->foo; 
} 
+0

您应该使用!==。如果其他人返回“”,该怎么办? PHP评估(“”== false)为true – 2012-05-26 18:16:28

相关问题