我有一个带有多维输入字段的复杂表单;
<input type="hidden" name="product[12267][ID]" value="76">
<input type="radio" name="product[12267][electrical_support]" value="1">
<input type="radio" name="product[12267][electrical_support]" value="0" checked="">
<input type="checkbox" name="product[12267][drinks]" value="1" >
<input type="radio" name="product[9999][electrical_support]" value="1">
<input type="hidden" name="product[9999][ID]" value="58">
使用jquery的ajax和serializeArray将表单发送到php;
var formData = new FormData();
formData.append('action', 'add_to_cart');
formData.append('products', $(form).serializeArray());
这会在控制台中输出一组对象,例如:
0: Object
name: "product[12267][starting_price]"
value: "15"
1: Object
name: "product[12267][ID]"
value: "79"
...
我的问题是如何根据 ID 将多个对象(在 js 中之前或在 php 中之后)分组/排列到单个产品数组中,例如;
$products[12267] = array('starting_price' => 15, 'ID' => 79);
希望我能很好地解释这个案例,如果我需要提供更多详细信息,请告诉我
最佳答案
除非我遗漏了一些东西,否则假设 $inproducts 来自 $_POST['product'] 并且包含不规则的产品信息数组,这应该可以工作。
$products = array();
foreach ($inproducts as $key=>$inproductarray) {
if (!isset($products[$key])) {
$products[$key]=array();
}
foreach ($inproductarray as $subkey=>$subvalue) {
$products[$key][$subkey] = $subvalue;
}
}
请注意,生成的数组可能仍然不规则。如果在 POST 数组中找不到表单字段,则不会将其添加到结果数组中。如果您需要确保所有产品都具有所有属性,请在为产品创建数组时命名键:
$products[$key]=array('id'=>$key,'starting_price'=null,'electrical_support='null',etc).
当您迭代 $inproductarray 时,它们将被填充。
关于php - 根据 ID 将序列化的 JS 数组分组为相似的对象/数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26948036/