PHP报错$image非数组及按上传时间排序文件问题求助
我来帮你搞定这两个技术问题,咱们一步步拆解解决:
问题1:修复
$image is not an array报错 你代码里的问题很明确:$image = $files[$i];这行把单个文件路径(字符串类型)赋值给了$image,但紧接着调用的sort($image)是用来排序数组的函数,自然会抛出类型错误。而且这个sort调用本身完全没必要——你要排序的是整个文件列表,不是单个文件路径。
问题2:实现按上传时间排序(最早上传的在顶部)
要实现这个需求,我们可以借助filemtime()函数获取文件的最后修改时间(一般来说,文件上传到服务器后的修改时间就等于上传时间),然后用usort()自定义排序规则,让时间更早的文件排在数组前面。
完整修正后的代码
// 获取所有图片文件路径 $files = glob("Pictures/*.*"); // 按文件上传时间(修改时间)排序,最早的在前 usort($files, function($a, $b) { return filemtime($a) - filemtime($b); }); // 定义支持的文件格式 $supported_file = array('gif', 'jpg', 'jpeg', 'png'); // 遍历处理每个文件 foreach ($files as $image) { $ext = strtolower(pathinfo($image, PATHINFO_EXTENSION)); if (in_array($ext, $supported_file)) { // 这里写你要输出图片的逻辑,比如: echo "<img src='$image' alt='上传图片' />"; } }
关键说明
- 把排序逻辑移到了循环外面,先对整个
$files数组排序,再遍历处理,效率更高 usort的匿名函数里,filemtime($a) - filemtime($b)会让修改时间更早的文件排在数组前面,正好符合你“最早上传的显示在顶部”的需求- 用
foreach替代了for循环,代码更简洁易读
内容的提问来源于stack exchange,提问作者Rida
相关产品推荐
相关产品推荐

