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

如何在PHP中合并分组指定数组键并将内容按固定大小分块?

调整PHP数组分组与内容块拆分方案

我来帮你搞定这个数组结构重组的问题!根据你给出的需求,我们需要把原来的扁平数组按日期分组,同时将每组内的商品项拆分成每2个一组的content块。下面是具体的实现方案:

完整代码实现

// 你的输入数组(示例)
$dataArray2 = array(
    0 => 'your date is 22 may 2018, Tuesday.',
    1 => 'hat: blue.',
    2 => 'tshirt: white',
    3 => 'hat: black.',
    4 => 'tshirt: cyan',
    5 => 'your date is 21 may 2018, Tuesday.',
    6 => 'hat: red.',
    7 => 'tshirt: blue',
);

$result = [];
$currentGroup = [];

foreach ($dataArray2 as $item) {
    // 处理日期项,作为分组的起始
    if(strpos($item, 'your date is') !== false) {
        // 如果当前已有未完成的分组,先整理后加入结果集
        if (!empty($currentGroup)) {
            // 将收集的商品项拆分为每2个一组
            $currentGroup['content'] = array_chunk($currentGroup['contentItems'], 2);
            unset($currentGroup['contentItems']); // 移除临时存储的字段
            $result[] = $currentGroup;
        }
        
        // 初始化新分组,同时处理日期格式转换
        $month_words = ["may"];
        $month_numbers = ["05"];
        $dateStr = str_replace($month_words, $month_numbers, $item);
        $dateStr = preg_replace('/[^0-9]/', '', $dateStr);
        $dateStr = substr_replace($dateStr, "-", 2, 0);
        $dateStr = substr_replace($dateStr, "-", 5, 0);
        $time = strtotime($dateStr);
        $formattedDate = date('Y-m-d', $time);
        
        $currentGroup = [
            'date' => $formattedDate,
            'contentItems' => [] // 临时存储当前分组下的所有商品项
        ];
    } 
    // 处理帽子项,提取纯值
    else if (strpos($item, 'hat') !== false) {
        $value = trim(str_replace(['hat:', '.'], '', $item));
        $currentGroup['contentItems'][] = $value;
    } 
    // 处理T恤项,提取纯值
    else {
        $value = trim(str_replace(['tshirt:', '.'], '', $item));
        $currentGroup['contentItems'][] = $value;
    }
}

// 处理最后一个未加入结果集的分组
if (!empty($currentGroup)) {
    $currentGroup['content'] = array_chunk($currentGroup['contentItems'], 2);
    unset($currentGroup['contentItems']);
    $result[] = $currentGroup;
}

// 输出最终结果
echo '<pre>';
print_r($result);
echo '</pre>';

代码逻辑说明

  1. 变量初始化:用$result存储最终的分组结果,$currentGroup临时构建当前的日期分组(包含日期和临时收集的商品项)。
  2. 遍历处理每个元素:
    • 遇到日期项时,先检查是否有未完成的分组,如果有就用array_chunk()把临时收集的商品项拆成每2个一组,再将分组加入结果集,随后初始化新的日期分组。
    • 遇到帽子或T恤项时,提取出纯文本值(去掉前缀和多余的点),存入当前分组的临时存储字段。
  3. 收尾处理:遍历结束后,别忘了把最后一个未处理的分组也整理好加入结果集。

运行后的结果

Array
(
    [0] => Array
        (
            [date] => 2018-05-22
            [content] => Array
                (
                    [0] => Array
                        (
                            [0] => blue
                            [1] => white
                        )

                    [1] => Array
                        (
                            [0] => black
                            [1] => cyan
                        )

                )

        )

    [1] => Array
        (
            [date] => 2018-05-21
            [content] => Array
                (
                    [0] => Array
                        (
                            [0] => red
                            [1] => blue
                        )

                )

        )

)

内容的提问来源于stack exchange,提问作者Ricardo

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 09:30:07