2014-10-07 3 views
0

Мне интересно, есть ли способ вернуть значения массива POST как нечто отличное от строки типа?

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

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

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

+1

Вам необходимо либо передать тип, либо определить его на основании некоторых критериев. Строки 0 и 1 ints или bools? – AbraCadaver

+0

Это то, что вы получаете с незнакомыми языками. :) –

+0

Нет. Все, что входит в GET/POST, по сути является строкой. Об этом нет. При использовании этих строк вам придется прибегать к строкам. например '$ forced_int = (int) $ _ POST ['somekey'];'. Что касается «абсурда»: вы видите где-нибудь в спецификации http, которая позволяет помещать такие метаданные в поле строки запроса/формы? 'http: //example.com/script.php? x: int = 42' недействителен или ожидается. –

ответ

1

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

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

Я бы просто добавил, что мой ответ - это ваш собственный. Но вы не указываете, откуда источник данных поступает с сервера или клиента. JSON всегда является лучшим и более универсальным форматом между сервером/клиентом. Сериализация из PHP очень специфична для языка PHP. – Heroselohim

6

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

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

Смежные вопросы