2

我一直在搜索 Stack Overflow 和网络的其他部分,我开始相信没有针对未定义索引的通用解决方案。

我有一个包含多个表单的大型 PHP 应用程序,在脚本的末尾我调用所有表单的输入并将它们放在一起以显示所有输入的摘要。

echo $_POST['FirstName'];
echo $_POST['MiddleName'];
echo $_POST['LastName'];

我知道如何检查每个事件,例如

if ( !isset($_POST['MiddleName']) ) { $_POST['MiddleName'] = '' }

有没有办法自动捕获所有未定义的索引,然后将它们设置为 0 或 null?

4

5 回答 5

4

它就像循环遍历可能定义的所有索引的数组一样简单:

   $indexes_that_MUST_be_defined_but_can_be_empty = array(
      'FirstName',
      * * *
      'LastName'
   );
   foreach($indexes_that_MUST_be_defined_but_can_be_empty as $index) {
       if( ! isset($_POST[$index])) {
           $_POST[$index] = NULL;
       }
   }

甚至您可以像这样预设不同的默认值:

   $indexes_that_MUST_be_defined_but_can_be_empty = array(
      'FirstName' => NULL,
      * * *
      'LastName' => NULL
   );
   $_POST = array_merge($indexes_that_MUST_be_defined_but_can_be_empty, $_POST);

如果你真的只是想抑制警告,你可以使用@如下:

echo htmlspecialchars(@$_POST['any_index']);

但我真的不推荐这个。

编辑:这是另一种可能的解决方案。一个使用指针的“神奇”函数:

function null_if_not_defined(&$variable) {
    return isset($variable) ? $variable : NULL;
}

// Usage: 
echo htmlspecialchars(null_if_not_defined($_POST['any_index']));
于 2013-05-01T10:48:06.167 回答
2

您可以使用以下功能来完成。

function setNullValue($arr)
{
    $newarr = array();
    foreach($arr as $key => $ar)
    {
        if($ar == "")
        {
            $newarr[$key] = 0;
        }
        else
        {
            $newarr[$key] = $ar;
        }
    }
    return $newarr;
}
print_r(setNullValue($_POST));
于 2013-05-01T10:51:24.863 回答
0

您还可以为此创建一个简单的函数:

$p = function($item) {
  return isset($_POST[$item]) ? $_POST[$item] : null;
};

现在您可以这样使用它:

echo $p('MiddleName');
于 2013-05-01T10:50:51.883 回答
0
foreach($_POST as $key=>$value) {
 if($value == "") $_POST[$key] = 0;
}
于 2013-05-01T10:51:11.947 回答
0

如果您只想显示那些分配了值的索引,您可以执行以下操作:

foreach ($_POST as $index => $value) {
  echo "{$index}: {$value}<br/>";
}
于 2013-05-01T10:48:13.313 回答