php循环输出多维数组(集合)里相同name下的value用逗号链接成字符串
主要问题是什么呢?我的数据库里面fav字集是以字符串的形式存储的,如果按照正常的表单提交复选的input,只需要将name命为name=“fav[]”,表单数据提交给PHP后台后会得到一个数组,只需使用php的impload函数将数组转换成以逗号相隔的数组就可以了。
然而,当试图通过ajax异步传递数据时,需要将form表单序列化才能成功传递,查看文档
有两种方法,“.serialize()”或者“.serializeArray()”,感觉“.serializeArray()”的看起来要舒服一点。
serializeArray();//序列化表单元素,返回 JSON 数据结构数据。
传递到后端的数据通过php输出是一个多维数组集合。
$form = $_post["a"];
print_r($form);
Array
(
[0] => Array
(
[name] => id
[value] => 17
)
[1] => Array
(
[name] => username
[value] => 法师kfd
)
[2] => Array
(
[name] => fav[]
[value] => 极客
)
[3] => Array
(
[name] => fav[]
[value] => 游戏
)
[4] => Array
(
[name] => fav[]
[value] => 动漫
)
)
问题来了,显然是不能直接使用implode(",",$fav)的,那么我要怎么将[name]=>fav所在的数组里的value取出来转换成字符串?
emmm。。。
既然前端form里的name = fav[]没有集合复选框为数组的效果,索性直接改成name = fav 了。
。。。。。。
首先,通过php的array_column()将集合以name所指内容为键,value所指内容为值 转换成普通的关联数组
$form1 = array_column($form, 'value','name');
print_r($form1);
Array
(
[id] => 16
[username] => 法师kfd
[fav] => 动漫
)
可以看到,重复fav键的值是有被覆盖了的。
接下来转换fav为字符串之前先判断[fav]是否存在,因为用户可能没有添加fav,如果不存在,直接使用转换后的数组就可以了,如果存在,就进行未转换的集合遍历输出name为fav所在数组的value值。
$form1['fav'] = blockArrayFav($form,",");
function blockArrayFav($form,$p){
$f = count($form,0);//判断数组长度,0只判断集合内数组个数
$i = 0;
$fav = '';
while($i<$f){
if ($form[$i]['name'] == 'fav'){
$fav = $fav . $form[$i]['value'] . $p;
}
$i++;
}
$fav = rtrim($fav, $p);//去掉尾端多余的逗号
return $fav;
}
print_r($form1);
Array
(
[id] => 16
[username] => 法师kfd
[fav] => 极客,游戏,动漫
)
这样看起来就舒服多了~