PHP中将含空值的数组转换为分组数组的实现方法
处理带空值的数组分组并拼接成字符串
嘿,作为PHP新手碰到这种数组重组的问题完全不用慌,我给你两种实用的实现方式,都很容易理解:
方法一:手动遍历(新手友好,逻辑清晰)
这种方式一步步来,能让你清楚看到每一步的处理过程,非常适合刚入门的朋友:
// 你的原始数组 $originalArray = [ '', // 索引0 2, 6, 7, '', // 索引4 1, 5, 6, '', // 索引8 1, 3, 5 ]; $result = []; $temp = []; foreach ($originalArray as $item) { // 如果当前元素非空,就加入临时数组 if (!empty($item)) { $temp[] = $item; } else { // 如果遇到空值,且临时数组里有内容,就把它拼接成字符串加入结果 if (!empty($temp)) { $result[] = implode(',', $temp); $temp = []; // 清空临时数组,准备下一组 } } } // 循环结束后,检查临时数组是否还有剩余元素(最后一组后面没有空值的情况) if (!empty($temp)) { $result[] = implode(',', $temp); } print_r($result);
代码解释:
- 先初始化
$result用来存最终的目标数组,$temp用来临时存放每一组的非空元素 - 遍历原始数组时,非空元素就丢进
$temp;碰到空值时,如果$temp里有内容,就用implode(',', $temp)把数组转成逗号分隔的字符串,丢进$result,然后清空$temp - 最后要单独检查
$temp,因为原始数组最后一组后面没有空值,得手动把它加入结果
运行后输出就是你要的:
Array ( [0] => 2,6,7 [1] => 1,5,6 [2] => 1,3,5 )
方法二:用array_reduce简化代码(稍微进阶一点)
如果你想写得更简洁,可以用array_reduce函数来处理,它能把数组迭代成一个值(这里是我们要的结果数组):
$originalArray = [ '', 2, 6, 7, '', 1, 5, 6, '', 1, 3, 5 ]; $result = array_reduce($originalArray, function($carry, $item) { if (!empty($item)) { // 如果当前元素非空,就加到最后一个临时组里 if (empty($carry)) { $carry[] = []; } end($carry); $key = key($carry); $carry[$key][] = $item; } else { // 遇到空值,且最后一个组有内容,就新增一个空组 if (!empty($carry) && !empty(end($carry))) { $carry[] = []; } } return $carry; }, []); // 把每个子数组转成逗号分隔的字符串 $result = array_map(function($group) { return implode(',', $group); }, $result); // 过滤掉可能存在的空字符串(比如开头空值导致的) $result = array_filter($result); print_r($result);
代码解释:
array_reduce遍历数组,用$carry来累积中间结果- 非空元素就加到
$carry的最后一个子数组里;遇到空值时,如果最后一个子数组有内容,就新增一个空的子数组 - 最后用
array_map把所有子数组转成字符串,再用array_filter去掉可能的空字符串(比如原始数组开头的空值可能会生成空的子数组,转成空字符串后过滤掉)
这个方法代码更简洁,但需要你对数组函数有一点了解,新手可以先从第一种方法入手,理解透彻后再尝试第二种。
内容的提问来源于stack exchange,提问作者Sanjeev rouhan
相关产品推荐
相关产品推荐

