Laravel中如何遍历多组输入数组并合并对应元素
问题:合并多组用户信息为指定格式的字符串/集合
我在Laravel控制器里写了这段代码:
$initials = $request->customer_initial; $firstnames = $request->room_customerfirstname; $lastnames = $request->room_customerlastname; print_r($initials); print_r($firstnames); print_r($lastnames);
打印结果如下:
Array ( [0] => Mr [1] => Ms ) Array ( [0] => Jeffrey [1] => Taylor ) Array ( [0] => Way [1] => Otwell )
现在需要把这些数据转换成这样的格式:
Mr Jeffrey Way Ms Taylor Otwell
请问该如何实现?
回答
嗨,这问题很好解决,给你两种实用的实现方式,适配Laravel开发场景:
方法1:原生PHP循环拼接(快速直接)
如果只是要生成目标格式的字符串,直接遍历数组索引拼接就好,逻辑清晰易懂:
$result = ''; // 取其中一个数组的长度作为循环次数(默认三个数组长度一致) $totalUsers = count($initials); for ($i = 0; $i < $totalUsers; $i++) { // 拼接单个用户的称谓、名、姓,再追加到结果里 $result .= "{$initials[$i]} {$firstnames[$i]} {$lastnames[$i]} "; } // 去掉末尾多余的空格 $result = trim($result); // 此时 $result 就是你要的 "Mr Jeffrey Way Ms Taylor Otwell" echo $result;
方法2:Laravel集合优雅实现(推荐)
既然用的是Laravel,用集合的zip方法可以更优雅地把三个数组按索引配对,后续扩展也更灵活:
// 将三个数组转为集合,用zip按索引合并,每个元素是包含单个用户三个信息的子集合 $userCollections = collect($initials)->zip($firstnames, $lastnames); // 生成目标字符串:先把每个用户的三个信息拼成字符串,再把所有用户的字符串用空格连接 $targetString = $userCollections ->map(fn($user) => implode(' ', $user)) ->implode(' '); echo $targetString; // 输出:Mr Jeffrey Way Ms Taylor Otwell // 如果需要保留集合格式(每个元素是单个用户的完整名称),只保留map结果即可: $userNamesCollection = $userCollections->map(fn($user) => implode(' ', $user)); // $userNamesCollection 是集合对象,内容为 ['Mr Jeffrey Way', 'Ms Taylor Otwell']
小提醒
两种方法都默认三个数组的长度是一致的,如果存在长度不一致的情况,你可以加个判断跳过不存在的索引,避免报错哦~
内容的提问来源于stack exchange,提问作者arun
相关产品推荐
相关产品推荐

