Javascript 如何将JSON解码为PHP数组/变量

Javascript 如何将JSON解码为PHP数组/变量,javascript,php,jquery,json,ajax,Javascript,Php,Jquery,Json,Ajax,我对PHP非常陌生,对于如何将POST请求中的数据传输到PHP,我无法理解这种语言的两个方面。以下是我对代码和问题的简短描述: 我有一些序列化的数组,它被转换成JSON,需要通过ajax发送到PHP,所以我可以使用数组中的这些值将它们插入数据库 这是我的密码: 验证函数,其中我只从所有已验证表单(已填充表单)中获取值,因为其中一些表单可能是故意为空的。我用。serializeArray()对表单进行编码,然后将它们转换为JSON,因为在这个函数的末尾,我需要返回一个数组,以便在ajax POST

我对PHP非常陌生,对于如何将POST请求中的数据传输到PHP,我无法理解这种语言的两个方面。以下是我对代码和问题的简短描述:

我有一些序列化的数组,它被转换成JSON,需要通过ajax发送到PHP,所以我可以使用数组中的这些值将它们插入数据库

这是我的密码:

验证函数,其中我只从所有已验证表单(已填充表单)中获取值,因为其中一些表单可能是故意为空的。我用。serializeArray()对表单进行编码,然后将它们转换为JSON,因为在这个函数的末尾,我需要返回一个数组,以便在ajax POST中使用它

// Validate forms
function validateForms() {
var formData = [];

$('#add-items form').each(function () {
    var itemFormId = $(this).attr('id');

    if ($(this)[0].checkValidity() == false) {
        console.log("Empty forms: " + itemFormId);
    } else {
        console.log("Filled forms: " + itemFormId + "\n");       
        var formDataX = $(this).serializeArray();

        switch (itemFormId) {
            case 'equippable-item-form':
                formDataX.push({name: 'item-type', value: "equippable"});
                break;
            case 'weapon-form':
                formDataX.push({name: 'equippable-item-type', value: "weapon"});
                break;
            case 'armor-form':
                formDataX.push({name: 'equippable-item-type', value: "armor"});
                break;
        }
        formData.push(...formDataX);
    }
});

formData = JSON.stringify(formData);
console.log(formData);
return formData;
}
以下是简短版本的ajax帖子:

formData = validateForms();
$.ajax({
    type: 'POST',
    url: 'php/admin.php',
    data: { items_data: formData },   
    success: function (data) {
         data = $.parseJSON(data);
         $("#status-message").text(data.message);
    },
 });
PHP代码,我在这里得到这篇文章,并试图解码这个JSON:

if (isset($_POST['items_data'])) {
    $data = json_decode(stripslashes($_POST['items_data']),true);
    $status = testNewItem($data['item-name-input'], $data['price-input'], $data['item-level-input'], $data['required-level-input']);
}

// Print the status
if ($status):
    echo json_encode(["message" => $status]);
endif;
这是my database.php中的代码,我在其中将值插入数据库:

function testNewItem($itemName, $price, $itemLevel, $reqLevel)
{
    $conn = connection();
    $conn->query("INSERT INTO item (`name`, `price`, `item_level`, `required_level`) VALUES ('" . $itemName . "', $price, $itemLevel, $reqLevel)");
    $conn->errorInfo();

    $status = "Successfully inserted new item into the database!";

    return $status;
    $conn = null;
}
我的JSON的简短版本:

[{
    "name": "item-name-input",
    "value": "asdasd"
}, {
    "name": "price-input",
    "value": "2"
}, {
    "name": "item-level-input",
    "value": "4"
}, {
    "name": "required-level-input",
    "value": "2"
}]
问题:我不知道我是否正确解码了这个JSON数组,但成功发布后我无法打印它。此外,我不知道如何将该值从$data传递到名为testNewItem的函数中,该函数应该将该值插入数据库(如果我手动输入固定值,该函数将正常工作)。我尝试了很多在stackoverflow上找到的解决方案,但都找不到哪里做错了


如果有人能帮助我,我将非常感谢。

您的json正在转换为一个数组,下面有更多的数组

您正试图使用$data访问它,但需要执行$data[0]才能访问第一个数组


$data[0]['name']=项目名称输入当前json的结构如下

Array
(
    [0] => Array
        (
            [name] => item-name-input
            [value] => asdasd
        )

    [1] => Array
        (
            [name] => price-input
            [value] => 2
        )

    [2] => Array
        (
            [name] => item-level-input
            [value] => 4
        )

    [3] => Array
        (
            [name] => required-level-input
            [value] => 2
        )

)
$json_data = json_decode(stripslashes($_POST['items_data']),true);
$data = [];
foreach ($json_data as $item) {
    $data[$item['name']] = $item['value'];
}
要以您想要的方式访问它,必须将json数组转换为键值格式。可以这样做

Array
(
    [0] => Array
        (
            [name] => item-name-input
            [value] => asdasd
        )

    [1] => Array
        (
            [name] => price-input
            [value] => 2
        )

    [2] => Array
        (
            [name] => item-level-input
            [value] => 4
        )

    [3] => Array
        (
            [name] => required-level-input
            [value] => 2
        )

)
$json_data = json_decode(stripslashes($_POST['items_data']),true);
$data = [];
foreach ($json_data as $item) {
    $data[$item['name']] = $item['value'];
}
或者如果你不想使用循环

$data = array_combine(
    array_column($data, 'name'),
    array_column($data, 'value'));

哦,是的,我忘了将json数组转换为键值格式。谢谢你的回答,真的帮助了我!