我检查了各种SO问题
但这些都不会发送多套复选框。
我有一个包含一系列复选框的表单:
<input type="checkbox" name="color[]" value="1"/>
<input type="checkbox" name="color[]" value="2"/>
...
<input type="checkbox" name="size[]" value="1"/>
<input type="checkbox" name="size[]" value="2"/>
...
表单上还有一些其他非复选框。
我通过ajax发送给php:
$.ajax({
url: '/filter',
type: 'POST',
data: { filter: $(self.form).serializeArray()},
dataType: 'JSON'
});
然后我需要在PHP中获取每组复选框值。所以我输出帖子:
array (size=4)
0 =>
array (size=2)
'name' => string 'color[]' (length=7)
'value' => string '4' (length=1)
1 =>
array (size=2)
'name' => string 'color[]' (length=7)
'value' => string '6' (length=1)
2 =>
array (size=2)
'name' => string 'length[]' (length=8)
'value' => string '3' (length=1)
3 =>
array (size=2)
'name' => string 'length[]' (length=8)
'value' => string '5' (length=1)
但我怎样才能得到每组价值?我想要一个包含所有颜色的var,以及一个包含各种尺寸的var。
只是为了澄清 - 我正在寻找一种方法在PHP中将颜色变成数组而另一个数组用于lenths。
类似的东西:
$_POST['filter']['color'];
答案 0 :(得分:0)
您希望结果在发送到php时已经是一个检查值数组吗? 如果是,那么您需要预处理它:
var result = [];
$('input[type="checkbox"][name="color[]"]').each(function(_, ele) {
if ($(ele).prop('checked')) {
result.push($(ele).attr('value'));
}
});
希望你想要的东西。
答案 1 :(得分:0)
这里有一些PHP代码可以将$_POST
转换为名为$filter
的新数组
$filter = array();
foreach ($_POST as $checkbox) {
if (substr($checkbox['name'],-2) == '[]') {
$name = substr($checkbox['name'],0,-2);
if (!array_key_exists($name,$filter)){
$filter[$name] = array();
}
array_push($filter[$name],$checkbox['value']);
}
}
print_r($filter);
它的作用是:
name
是否以[]
结尾,如果是这种情况则假定它是一个复选框,如果不是,则忽略它。$filter
中生成一个新数组,其中包含每个复选框组的数组因此$filter
您的示例$_POST
将如下所示:
Array (
['color'] => Array (
[0] => 4
[1] => 6
)
['length'] => Array (
[0] => 3
[1] => 5
)
)
答案 2 :(得分:-2)
<?php
$colors = $_POST['filter']['color'];
print_r($colors);
?>