Я задаюсь вопросом, есть ли способ получить значения массива POST, которые будут возвращаться как что-то отличное от строки типа?
Так, например, если бы я хотел:
foreach ($_POST as $key => $value)
{
if (is_X($value)) // X being int or bool or string, etc....
{
do something.....
}
}
Я начал думать, может быть, settype($var, "type")
Однако мне пришлось бы явно установить тип для каждого ввода, что кажется абсурдным способом сделать это.
Конечно, это можно сделать с помощью некоторого пользовательского определения имен идентификаторов.
Сериализация или формат 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);
}
Короче говоря: нет. Данные POST поступают по протоколу HTTP, обычно это x-www-form-urlencoded. Этот формат вообще не указывает никаких типов, все является строкой. PHP не может и не может магически наполнять типы ни одним из этих значений.
Если вы хотите перенести информацию о типе, вам придется использовать другой формат сериализации. Например, JSON кодирует ваши значения на клиенте и отправляет данные JSON как тело запроса. JSON — это текстовый формат, который поддерживает несколько различных типов.