You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 08:43:52