添加usort代码后图片展示重复:第三张及后续覆盖首尾位置
问题分析与修复:图片上传后重复占据首尾位置
你遇到的这个图片重复显示的bug,确实和你添加的usort代码位置直接相关。
问题根源
你把usort($files, ...)放在了for循环的内部,这意味着每次循环迭代时都会重新对$files数组进行排序。当上传第三张及更多图片后,第一次循环($i=0)执行排序会打乱数组顺序;第二次循环($i=1)又再次触发排序,此时数组的状态已经因为前一次排序和操作发生了变化,最终就导致了首尾位置图片重复、后续图片替换首尾的异常。
修复方案
只需要把排序操作移到for循环外面,确保数组只被排序一次,而不是每次循环都重新排序:
$files = glob("Opplastetbilder/*.*"); // 先对文件数组按修改时间排序,仅执行一次 usort($files, function($a, $b) { return filemtime($a) - filemtime($b); }); // 遍历已经排好序的数组 for ($i=0; $i<count($files); $i++) { $image = $files[$i]; // 这里写你处理$image的后续代码(比如输出图片标签等) }
额外说明
如果你的需求是让最新上传的图片排在前面,只需要把排序逻辑改成倒序即可:
usort($files, function($a, $b) { return filemtime($b) - filemtime($a); });
这样修改后,数组的顺序会保持稳定,就不会再出现图片重复占据首尾位置的问题了。
内容的提问来源于stack exchange,提问作者Khalid jamal




