You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

添加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

火山引擎 最新活动