在php中访问$ _POST数组变量

时间:2013-12-29 23:19:01

标签: php arrays post

我能够访问我的$ _POST数组值,但似乎无法获得正确的语法,只返回"数据"数组的一部分。如果我运行var_dump($_POST["attributes"]);,我会在响应回调中收到以下内容(这正是我的预期):

string '{
    "device_maker" = unknown;
    "device_model" = Simulator;
    "first_visit" = "1387478168.109";
    "last_visit" = "1388358490.638";
    latitude = "37.78583526611328";
    locale = en;
    longitude = "-122.4064178466797";
    "opted_in" = 1;
    "opted_out" = 0;
    "os_platform" = "iPhone OS";
    "os_version" = "7.0.3";
    "this_visit" = "1387478168.109";
    "user_id" = 1;
}' (length=389)

如果我尝试单独访问任何一个属性,例如var_dump($_POST["attributes"]["device_model"]);,我得到的全部是string '{' (length=1)。我显然错过了解析这些数据的关键想法。我如何解析"属性"所以我可以将每个列出的值放入一个插入语句中(一旦我获得数据,我已经准备好了这部分)?当然,我的PHP非常生疏。所以我可能会忽视一些明显的东西。

看到我需要的数据而不知道如何正确访问它是令人沮丧的。所以,任何帮助表示赞赏。请询问您是否需要澄清。

2 个答案:

答案 0 :(得分:1)

显然,在POST中检索的字符串不是有效的JSON。如果无法替换发送到服务器的值,则可以始终执行(脏)变通方法:

首先,替换一些字符使其成为有效的json:

$jsonStr = str_replace('=', ':', $_POST["attributes"]);
$jsonStr = str_replace(';', ',', $jsonStr);
$jsonStr = str_replace(',}', '}', $jsonStr);

然后我们可以尝试使用json_decode函数解析它:

$jsonArray = json_decode($jsonStr);

现在您可以将其作为常规关联数组进行访问,例如:

echo $jsonArray['device_model'];

答案 1 :(得分:-2)

您在此处显示的内容看起来像JSON编码数据 - 它是单个字符串,因此没有$ _POST [“attributes”] [“device_model”]。

您可以通过从JSON转换来访问属性变量中嵌入的数据:

$a_string='{
"device_maker" = unknown;
"device_model" = Simulator;
"first_visit" = "1387478168.109";
"last_visit" = "1388358490.638";
latitude = "37.78583526611328";
locale = en;
longitude = "-122.4064178466797";
"opted_in" = 1;
"opted_out" = 0;
"os_platform" = "iPhone OS";
"os_version" = "7.0.3";
"this_visit" = "1387478168.109";
"user_id" = 1;
}';
// or $astring=$_POST['attributes']
$data=json_decode($a_string);
print $data['device_model'];

....但你需要验证数据的来源 - 如果它不是JSON,那么这会在某些时候中断。