改进if语句的php代码

时间:2012-08-24 17:29:18

标签: php cakephp-2.0

我有这段代码

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;
}

写这个是更好还是更短的方式?

3 个答案:

答案 0 :(得分:11)

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

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

答案 1 :(得分: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;

(想听听你对这个的意见)

Loop是王道。

$posted_keys = array("key1" , "key2" , "nilak");
foreach($posted_keys as $key)
{
  if(!array_key_exists($key , $_POST))
  {
   $_POST[$key] = null;
  }
}

答案 2 :(得分: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。