我想知道是否有办法让POST数组的值作为字符串以外的其他类型返回?
所以,例如,如果我想:
foreach ($_POST as $key => $value)
{
if (is_X($value)) // X being int or bool or string, etc....
{
do something.....
}
}
我开始考虑settype($var, "type")
但是,我必须为每个输入明确设置类型,这似乎是一种荒谬的方式。
答案 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);
}