PHP - $ _POST的数据类型解决方法

时间:2014-10-07 18:27:34

标签: php arrays post variable-types

我想知道是否有办法让POST数组的值作为字符串以外的其他类型返回?

所以,例如,如果我想:

 foreach ($_POST as $key => $value) 
 {
     if (is_X($value)) // X being int or bool or string, etc....
     {
         do something.....
     }
 } 

我开始考虑settype($var, "type") 但是,我必须为每个输入明确设置类型,这似乎是一种荒谬的方式。

2 个答案:

答案 0 :(得分:6)

简而言之:不。 POST数据来自HTTP协议,通常是x-www-form-urlencoded。这种格式根本没有指定任何类型,一切都是字符串。 PHP赢了,并且无法在任何这些值上神奇地灌输类型。

如果要传输类型信息,则必须使用其他序列化格式。例如,JSON在客户端上编码您的值并将JSON数据作为请求主体POST。 JSON是一种支持许多不同类型的文本格式。

答案 1 :(得分:1)

当然可以使用id名称的一些自定义定义来完成。

序列化或JSON格式是最好的方法。但是你的问题对于背景还不够具体。

// Custom definition for fieldnames or keynames
$key_types = array(
    "name" => "string",
    "email" => "string",
    "receive_news" => "bool",
    "age" => "int"
);
// This way you will ALWAYS be sure that type is the same

function castByID($name, $val)
{
    $type = $key_types[$name];
    switch($type)
    {
        default:
        case "string":  $val = (string)$val; break;
        case "bool":  $val = ($val=='1'?true:false); break; // Adapt to your data format
        case "int":  $val = (int)$val; break;
    }
    return $val;
}

if (isset($_POST["user"]))
{
    $data = array();
    foreach ($_POST["user"] as $name => $val) 
        $data[$name] = castByID($name, $val);
}