1

我有这个代码

if(!array_key_exists('key1', $_POST)){
    $_POST['key1'] = null;
}
if(!array_key_exists('key_x', $_POST)){
    $_POST['key_x'] = null;
}
if(!array_key_exists('key_polar_8', $_POST)){
    $_POST['key_polar_8'] = null;
}
if(!array_key_exists('nilak', $_POST)){
    $_POST['nilak'] = null;
}

写这个是更好或更短的方法吗?

4

3 回答 3

11

您可以将字段名称放在一个数组中,然后使用循环。

$keys = array('key1', 'key_x', 'key_polar_8', 'nilak');
foreach($keys as $k){
    if(!array_key_exists($k, $_POST)){
       $_POST[$k] = null;
    }
}
于 2012-08-24T17:33:03.447 回答
3

编辑: 另一种创造性的方式:不是array_key_exists每次都检查是否,只需找到那些键array_diff_key并放置null

$posted_keys = array("key1" , "key2" , "nilak");
$not_in_post = array_diff_key($posted_keys, $_POST);
foreach($not_in_post as $k)
  $_POST[$k] = null;

(想听听你对这个的看法)

循环为王。

$posted_keys = array("key1" , "key2" , "nilak");
foreach($posted_keys as $key)
{
  if(!array_key_exists($key , $_POST))
  {
   $_POST[$key] = null;
  }
}
于 2012-08-24T17:33:37.827 回答
1

只是为了提供另一种方式,不一定是最好的,但您可以像这样使用 array_merge:

<?php
$defaultValues = array('key1'=>null, 'key_x'=>null, 'key_polar_8'=>null, 'nilak'=>null);
$_POST = array_merge($defaultValues, $_POST);

http://codepad.viper-7.com/ix0KTD

如果您的帖子数组具有数字键,则可能会遇到小问题,因为 array_merge 会附加数字键。不过,这通常不是 $_POST 的问题。

这也允许将任何值设置为默认值,而不仅仅是 null。

于 2012-08-24T17:46:35.503 回答