PHP中未定义的索引。需要通用解决方案

时间:2013-05-01 10:42:43

标签: php

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

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

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

我知道如何检查每次出现

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

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

5 个答案:

答案 0 :(得分: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']));

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

答案 2 :(得分:0)

如果只想显示具有指定值的索引,可以执行以下操作:

foreach ($_POST as $index => $value) {
  echo "{$index}: {$value}<br/>";
}

答案 3 :(得分:0)

你也可以为此创建一个简单的函数:

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

现在你可以这样使用它:

echo $p('MiddleName');

答案 4 :(得分:0)

foreach($_POST as $key=>$value) {
 if($value == "") $_POST[$key] = 0;
}