如何根据首个相同值合并二维数组的内层数组?
解决方案
要得到你期望的数组结构,核心是以GUID作为外层数组的键,将同GUID下的文件名归类到对应子数组中,替换你原来的第二个循环即可:
$groupedFiles = []; foreach ($newProcessedFileNames as $row) { // 分割路径字符串,分离GUID和文件名 $parts = explode('\\', $row); // 确保格式正确,避免异常数据报错 if (count($parts) === 2) { list($guid, $fileName) = $parts; // 如果当前GUID的子数组不存在,先初始化 if (!isset($groupedFiles[$guid])) { $groupedFiles[$guid] = []; } // 将文件名追加到对应GUID的子数组 $groupedFiles[$guid][] = $fileName; } } prettyPrint($groupedFiles);
优化版(一步到位)
如果不需要保留$newProcessedFileNames数组,还可以在第一个循环中直接完成分组,省去额外的循环步骤:
$groupedFiles = []; foreach ($files as $file) { $filename = substr($file, 0, strrpos($file, '.')) . '.jpg'; // 保留你的其他业务代码 if (isset($filename)) { $parts = explode('\\', $filename); if (count($parts) === 2) { list($guid, $fileName) = $parts; // PHP中如果键不存在,直接赋值会自动初始化子数组,可省略isset判断 $groupedFiles[$guid][] = $fileName; } } } prettyPrint($groupedFiles);
说明
- 原来的代码是将每个分割后的
[GUID, 文件名]数组直接推入结果,现在改为用GUID作为外层数组的键,把文件名归类到对应键的子数组里,完美匹配你想要的结构。 - 增加
count($parts) === 2的判断是为了兼容格式异常的文件名,避免因数据问题导致报错。
内容的提问来源于stack exchange,提问作者FairlyIncognito
相关产品推荐
相关产品推荐

