如何实现两个数组对应索引元素逐一合并?PHP代码问题咨询
解决PHP数组对应索引合并的问题
我明白你想要的是把两个数组对应索引位置的元素一一配对合并,而不是简单地把第二个数组追加到第一个后面。当前array_merge()的行为是将第二个数组的所有元素接在第一个数组末尾,所以才会得到你看到的结果。
下面提供两种可行的修改方案,你可以根据自己的需求选择:
方案一:使用array_map()快速配对
array_map()可以同时遍历多个数组,当传入null作为回调函数时,会自动将多个数组对应索引的元素组合成子数组:
$latlong = office::select('latitude', 'longitude')->get(); foreach ($latlong as $l) { $lati = explode(',', $l->latitude); $longi = explode(',', $l->longitude); // 对应索引元素配对成子数组 $result = array_map(null, $lati, $longi); dd($result); }
执行后你会得到类似这样的结果:
array:4 [▼ 0 => array:2 [▼ 0 => "31.4824454" 1 => "74.3270004" ] 1 => array:2 [▼ 0 => "31.4824454" 1 => "74.31525707" ] 2 => array:2 [▼ 0 => "31.48306351" 1 => "74.31045055" ] 3 => array:2 [▼ 0 => "" 1 => "" ] ]
如果想要把对应元素拼接成字符串(比如"纬度,经度"的格式),可以自定义array_map的回调函数:
$result = array_map(function($lat, $lng) { // 处理空值,避免出现多余的逗号 return trim("$lat,$lng", ','); }, $lati, $longi);
方案二:手动循环遍历索引
如果需要更灵活的控制(比如处理数组长度不一致的情况),可以手动遍历索引来配对元素:
$latlong = office::select('latitude', 'longitude')->get(); foreach ($latlong as $l) { $lati = explode(',', $l->latitude); $longi = explode(',', $l->longitude); $result = []; // 取两个数组的最大长度,确保所有元素都被处理 $maxLength = max(count($lati), count($longi)); for ($i = 0; $i < $maxLength; $i++) { // 处理数组长度不一致的情况,避免索引不存在报错 $currentLat = isset($lati[$i]) ? $lati[$i] : ''; $currentLng = isset($longi[$i]) ? $longi[$i] : ''; // 选择你需要的格式:子数组或拼接字符串 $result[] = [$currentLat, $currentLng]; // $result[] = trim("$currentLat,$currentLng", ','); } dd($result); }
这个方案的优势在于可以自定义处理空值或者数组长度不一致的场景,比如某个数组元素少的时候用空字符串填充。
内容的提问来源于stack exchange,提问作者Fahad Arshad
相关产品推荐
相关产品推荐

