【发布时间】:2018-11-02 15:53:37
【问题描述】:
我有一个$products 数组:
$products = [
1031 => [
'id' => '1031',
'name' => 'TR16',
'price' => 98.75
],
1032 => [
'id' => '1032',
'name' => 'TR16G',
'price' => 148.75
]
];
还有一个 $newItemIds 数组:
$newItemIds = [
1031 => [
'id' => 1031,
'quantity' => 4
],
1032 => [
'id' => 1032,
'quantity' => 2
]
];
我正在尝试遍历这些数组并修改$products 数组,使其包含quantity。
我的循环如下所示:
foreach($products as &$product) {
foreach($newItemIds as $key => $value) {
if ($product['id'] == $value['id']) {
$product['quantity'] = $value['quantity'];
}
}
}
在 phptester.net,它会打印这个结果(正是我想要的):
Array
(
[1031] => Array
(
[id] => 1031
[name] => TR16
[price] => 98.75
[quantity] => 4
)
[1032] => Array
(
[id] => 1032
[name] => TR16G
[price] => 148.75
[quantity] => 2
)
)
在循环之前,我成功地将echo json_encode($products) 回到$.ajax 并在控制台中查看。
0: {id: "1031", name: "TR16", price: "98.75"}
1: {id: "1032", name: "TR16G", price: "148.75"}
$.ajax 请求正在运行。
但是,在循环之后,当我再次回显 $products 以查看修改后的数组 (echo json_encode($products)) 时,我收到了 500 (Internal Server Error)。
Ajax 正在运行;循环正常工作,但出了点问题。
如果有人知道我可能做错了什么,我将不胜感激。
这是所有测试的代码:
<?php
$products = [
1031 => [
'id' => '1031',
'name' => 'TR16',
'price' => 98.75
],
1032 => [
'id' => '1032',
'name' => 'TR16G',
'price' => 148.75
]
];
$newItemIds = [
1031 => [
'id' => 1031,
'quantity' => 4
],
1032 => [
'id' => 1032,
'quantity' => 2
]
];
foreach($products as &$product) {
foreach($newItemIds as $key => $value) {
if ($product['id'] == $value['id']) {
$product['quantity'] = $value['quantity'];
}
}
}
echo '<pre>';
print_r($products);
echo '</pre>';
【问题讨论】:
-
sandbox.onlinephpfunctions.com/code/… ...从表面上看似乎工作正常。您是否错过了示例中的其他相关细节?顺便说一句,如果您检查您的 PHP 日志(如果有的话)或打开错误报告,您将能够看到 500 错误的确切原因 - 它可能是任何类型的崩溃,因此其上的 500 代码自己的信息不足以真正提供详细帮助,尤其是当您显示的代码似乎可以正常工作时。
-
很可能是错字或缺少
; -
但是,从语义的角度来看,编码两个单独的 json 对象并回显它们可能会混淆您的客户端代码,因为它会期望返回一个连贯的 json 对象/数组,而不是两个独立的数据。它不会被 JavaScript 解析。这不会导致 500 错误,但会导致浏览器出现 JS 错误。