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

PHP按前缀子串分组文件名数组并生成竖线分隔元素问题

按文件名前缀分组并连接数组元素

我有一个包含文件名的一维数组,需要按文件名的前缀子串进行分组,并将每组内的文件名用竖线(|)连接成单个元素。

示例输入

$j = [
    'ma_1_49812_5318.jpg',
    'ma_1_49812_5319.jpg',
    'ma_1_49813_5320.jpg',
    'ma_1_49813_5321.jpg',
];

期望结果

[
    'ma_1_49812_5318.jpg|ma_1_49812_5319.jpg',
    'ma_1_49813_5320.jpg|ma_1_49813_5321.jpg',
]

我的代码尝试

$entry = array();
$lastjs = '';
$jx ='';
foreach ($j as $group) {
    $jx = explode("_", $group)[2];
    if ($jx == $lastjs || $lastjs == '') {
        $entry[] = $group;
        $lastjs = $jx;
    }
    else
    {
        $entry[] = $group;
        $lastjs = $jx;
    }
}

错误结果

(
    [0] => ma_1_49812_5318.jpg
    [1] => ma_1_49812_5319.jpg
    [2] => ma_1_49813_5320.jpg
    [3] => ma_1_49813_5321.jpg
)

解决方案

你的代码只是将所有元素直接追加到数组中,没有实现分组和连接逻辑。正确的做法是先按前缀分组,再将每组元素拼接成字符串:

$j = [
    'ma_1_49812_5318.jpg',
    'ma_1_49812_5319.jpg',
    'ma_1_49813_5320.jpg',
    'ma_1_49813_5321.jpg',
];

// 1. 按前缀分组
$groups = [];
foreach ($j as $file) {
    $parts = explode('_', $file);
    // 取下划线分割后的第三个部分作为分组标识
    $groupKey = $parts[2];
    $groups[$groupKey][] = $file;
}

// 2. 将每组内的文件名用|连接
$result = array_map(function($items) {
    return implode('|', $items);
}, $groups);

print_r($result);

代码说明

  • 遍历数组时,用explode('_', $file)拆分文件名,提取第三个分段作为分组的键,把同属一个分组的文件名存入对应的数组中。
  • 用array_map遍历分组后的数组,通过implode('|', $items)把每个分组里的文件名拼接成单个字符串,最终得到期望的结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 04:35:19