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
相关产品推荐
相关产品推荐

