如何在PHP中从序列化数组中获取POST值?

如何在PHP中从序列化数组中获取POST值?,php,jquery,json,parsing,serializearray,Php,Jquery,Json,Parsing,Serializearray,我正在尝试我见过的这个新方法serializeArray() 所以我得到了这些键值对,但是如何使用PHP访问它们呢 我认为我需要这样做,但它不起作用: // in PHP script $data = json_decode($_POST['data'], true); var_dump($data);// will return NULL? 谢谢,Richard,javascript不会改变值发布的方式,是吗?难道你不能像往常一样通过PHP通过$\u POST['name\u of\u i

我正在尝试我见过的这个新方法
serializeArray()

所以我得到了这些键值对,但是如何使用PHP访问它们呢

我认为我需要这样做,但它不起作用:

// in PHP script
$data = json_decode($_POST['data'], true);

var_dump($data);// will return NULL?

谢谢,Richard,javascript不会改变值发布的方式,是吗?难道你不能像往常一样通过PHP通过
$\u POST['name\u of\u input\u goes\u here']访问这些值吗?


编辑:您可以随时使用
print\r($\u POST)
转储$\u POST的内容,以查看从javascript表单提交中收到的内容。这会让您了解在PHP中访问所需数据需要做些什么。

返回的JSON结构不是字符串。您必须使用插件或第三方库将其“字符串化”。有关更多信息,请参见此:


就像Gumbo建议的那样,您可能没有处理的返回值。
试一试

如果
$data
不包含预期数据,则
var\u dump($\u POST)
查看Ajax调用在脚本中的作用。可能是您试图从错误的键访问JSON

编辑
实际上,您应该首先确保您确实发送了JSON:)

jQuery docs for serialize state.serializeArray()方法创建一个对象的JavaScript数组准备编码为JSON字符串。准备编码的不是JSON。显然,jQuery中没有Object2JSON函数,因此要么用作第三方库,要么改用。

OP可能仍然使用serializeArray()而不是serialize(),方法是进行以下更改:

//JS 
var data = $("#form :input").serializeArray();
data = JSON.stringify(data);
post_var = {'action': 'process', 'data': data };
$.ajax({.....etc

// PHP
$data = json_decode(stripslashes($_POST['data']),true);
print_r($data); // this will print out the post data as an associative array

我的情况与此非常相似,我相信Ty W有正确的答案。我将包括一个代码示例,以防有足够的差异来更改结果,但似乎您可以像在php中通常那样使用发布的值

// Javascript
$('#form-name').submit(function(evt){
var data = $(this).serializeArray();
$.ajax({ ...etc...

// PHP
echo $_POST['fieldName'];

这是一个非常简化的示例,但我认为关键点是您不想使用
json\u decode()
方法,因为它可能会产生不需要的输出。

使用序列化数组和json\u decode()是可能的

这些值作为数组接收

可以使用$value[0]['value']检索每个值。每个html组件名称都以$value[0]['name']形式给出

print_r($value) //gives the following result
Array ( [0] => Array ( [name] => name [value] => Test ) [1] => Array ( [name] => exhibitor_id [value] => 36 ) [2] => Array ( [name] => email [value] => test@gmail.com ) [3] => Array ( [name] => phone [value] => 048028 ) [4] => Array ( [name] => titles [value] => Enquiry ) [5] => Array ( [name] => text [value] => test ) ) 

可以在php中使用此函数反转序列化数组()



您是否以任何方式处理
json\u decode
的返回值?谢谢,之后我尝试将其用作关联数组。我现在将post数组存储在会话变量中,这样我就可以在其他地方进行print\u r或var\u转储。现在我什么都看不到了。发布的字符串是json格式,括号是{},我想这里一定涉及到一些解析。首先我打印了\r($\u POST),看到了[object object],在json\u解码保存json数据的postvar之后,我什么也没有得到。我现在做的是var_dump。看来你是对的,还有Saffraz。然后我会研究serialize。真的,php没有办法处理它???@Richard:这是可能的,但你必须找到一种解决方法。
// Javascript
$('#form-name').submit(function(evt){
var data = $(this).serializeArray();
$.ajax({ ...etc...

// PHP
echo $_POST['fieldName'];
// js
var dats = JSON.stringify($(this).serializeArray());
data: { values : dats } // ajax call

//PHP
 $value =  (json_decode(stripslashes($_REQUEST['values']), true));
print_r($value) //gives the following result
Array ( [0] => Array ( [name] => name [value] => Test ) [1] => Array ( [name] => exhibitor_id [value] => 36 ) [2] => Array ( [name] => email [value] => test@gmail.com ) [3] => Array ( [name] => phone [value] => 048028 ) [4] => Array ( [name] => titles [value] => Enquiry ) [5] => Array ( [name] => text [value] => test ) ) 
<?php
function serializeToArray($data){
        foreach ($data as $d) {
            if( substr($d["name"], -1) == "]" ){
                $d["name"] = explode("[", str_replace("]", "", $d["name"]));
                switch (sizeof($d["name"])) {
                    case 2:
                        $a[$d["name"][0]][$d["name"][1]] = $d["value"];
                    break;

                    case 3:
                        $a[$d["name"][0]][$d["name"][1]][$d["name"][2]] = $d["value"];
                    break;

                    case 4:
                        $a[$d["name"][0]][$d["name"][1]][$d["name"][2]][$d["name"][3]] = $d["value"];
                    break;
                }
            }else{
                $a[$d["name"]] = $d["value"];
            } // if
        } // foreach

        return $a;
    }
?>