массивы — обходной путь типа данных для $ _POST

Я задаюсь вопросом, есть ли способ получить значения массива POST, которые будут возвращаться как что-то отличное от строки типа?

Так, например, если бы я хотел:

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

Я начал думать, может быть, settype($var, "type")
Однако мне пришлось бы явно установить тип для каждого ввода, что кажется абсурдным способом сделать это.

0

Решение

Конечно, это можно сделать с помощью некоторого пользовательского определения имен идентификаторов.

Сериализация или формат 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);
}
1

Другие решения

Короче говоря: нет. Данные POST поступают по протоколу HTTP, обычно это x-www-form-urlencoded. Этот формат вообще не указывает никаких типов, все является строкой. PHP не может и не может магически наполнять типы ни одним из этих значений.

Если вы хотите перенести информацию о типе, вам придется использовать другой формат сериализации. Например, JSON кодирует ваши значения на клиенте и отправляет данные JSON как тело запроса. JSON — это текстовый формат, который поддерживает несколько различных типов.

6

По вопросам рекламы [email protected]