php循环输出多维数组(集合)里相同name的数组下的value用逗号链接成字符串返回

php循环输出多维数组(集合)里相同name下的value用逗号链接成字符串

主要问题是什么呢?我的数据库里面fav字集是以字符串的形式存储的,如果按照正常的表单提交复选的input,只需要将name命为name=“fav[]”,表单数据提交给PHP后台后会得到一个数组,只需使用php的impload函数将数组转换成以逗号相隔的数组就可以了。

然而,当试图通过ajax异步传递数据时,需要将form表单序列化才能成功传递,查看文档

w3school的jquery文档教程

有两种方法,“.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] => 极客,游戏,动漫
)

这样看起来就舒服多了~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值