改进if语句的php代码


improving php code for if statements

我有这个代码

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

写这篇文章的方式是更好还是更短?

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

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

编辑:另一种创造性的方式:不必每次都检查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;
  }
}

只是提供另一种方式,不一定是最好的,但您可以像这样使用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

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

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