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