使用PHP + Mysql对目录中的文件进行排序

如何解决使用PHP + Mysql对目录中的文件进行排序

|| 嗨! 基本上,我有一个图像轮播,其中每个图像都动态链接到文章。 我有一个读取目录的脚本,将文件名存储到数组中。 然后,我修剪文件扩展名,通过搜索名称相同/相似的文章,在数据库中查询要图像链接的文章。 例如:blets.jpg链接到皮带文章。 这样我就可以工作了。 但是我想做的是能够按照我的文章在订购栏中分配给他们的顺序显示图像。 现在,我获取图像并按字母顺序显示它们,而我想要做的就是按照分配给文章的顺序显示它们。 所以这是我的代码:
     echo \"<div id=\'carousel\'>\\n\";

    // Get image file name
  // open directory
  $myDirectory = opendir(\"./images/products/carousel/spring-summer-2011/\");

  while($fileName = readdir($myDirectory))  // get each file
  {
    $dirArray[] = $fileName;
  }

  closedir($myDirectory); // close directory


  //sort($dirArray); // sort files


  echo \"<div class=\'infiniteCarousel\'>
        <div class=\'wrapper\'>
          <ul>\\n\";

  foreach ($dirArray as $file)
  {
      if (substr(\"$file\",1) != \".\") //don\'t list hidden files
      {
      $name = substr($file,strrpos($file,\'.\')); // trim file name extension
      $res = mysql_query(\"Select id,alias,ordering from content where alias like \'{$name}\'  ORDER BY ordering\"); // order by is pretty useless here !!
              while ($row = mysql_fetch_array($res))
              {
              $id = $row[\'id\'];
              $alias = $row[\'alias\'];
              $ordering = $row[\'ordering\'];

      echo \"<li><a href=\'index.php?option=com_content&view=article&id={$id}\' title=\'{$alias}\'>\\n\";
      echo \"<img src=\'./images/products/carousel/spring-summer-2011/{$file}\' height=\'80\' width=\'120\' alt=\'{$alias}\' />\";
      echo \"</a></li>\\n\";
              }

      }
  }

  echo \"</ul>\\n</div>\\n</div>\\n\";

  echo \"</div>\"; //Close Carousel
我已经在代码中留下了评论。 而且我基本上知道需要做什么,只是不确定如何去做。 我需要专业人士!救命。     

解决方法

$Line[] = array();

foreach ($dirArray as $file)
 {
  if (substr(\"$file\",1) != \".\") //don\'t list hidden files
  {
  $name = substr($file,strrpos($file,\'.\')); // trim file name extension
  $res = mysql_query(\"Select id,alias,ordering from content where alias like \'{$name}\'  ORDER BY ordering\"); // order by is pretty useless here !!
          while ($row = mysql_fetch_array($res))
          {
          $id = $row[\'id\'];
          $alias = $row[\'alias\'];
          $ordering = $row[\'ordering\'];

  $Line[] = \"<li id=\'$ordering\'><a href=\'index.php?option=com_content&view=article&id={$id}\' title=\'{$alias}\'>\\n <img src=\'./images/products/carousel/spring-summer-2011/{$file}\' height=\'80\' width=\'120\' alt=\'{$alias}\' /></a></li>\\n\";
          }

  }
  }

sort($Line);
foreach ( $Line as $ordering => $line ) {
echo \"$line\";
}
    ,如果我对您的理解正确,则无需读取目录并将图像存储在数组中。 您可以查询数据库以按想要的顺序显示要显示的文章的集合,并在文章名称上添加“ 2”以获取图像的名称。 另一个优点是,您只需为所有文章查询一次数据库,而不必为每篇文章进行单独的查询。     ,我建议您按原样获取文件名,但分别进行查询和渲染。每次查询文件信息时,都应将该信息作为对象/数组存储到另一个数组中。完成所有查询后,您可以根据排序值进行排序。最后,您将遍历此数组并呈现结果。 希望对您有所帮助,如果您需要更多具体信息,请告诉我。     ,好的 !!! 鹰已着陆。好的,所以我得到了AR的解决方案,可以毫不费力地工作。 @Benjamin我也让你的工作,但我不得不将功能移出foreach循环 并将其更改为:
usort($rows,function($a,$b)
{
    return $a > $b ? 1 : -1;
});
然后它起作用了。 我从这次经历中学到了很多东西,所以我谢谢大家。 您确实帮助我进一步了解了数组。 现在,它可以在我的测试服务器(LAMP)上正常工作,但是请放心,它在Godaddy的服务器上无法正常工作。 uf! 和平。     ,您可以首先获取数组中的所有行,然后使用usort()根据您的特定条件对它们进行排序:
$rows = array();
foreach ($dirArray as $file) {
    // ...
    while ($row = mysql_fetch_array($res)) {
        $rows[] = $row;
    }
}

function my_sort($a,$b)
{
    return $a[\'ordering\'] - $b[\'ordering\'];
}

usort($rows,\'my_sort\');

foreach ($rows as $row) {
    // display the data
}
但是,按照jeroen的建议,您应该将所有查询分组为一个,这会使代码复杂一些,但是效率更高! (顺便说一句,如果您仅将$ row用作关联数组,您可能还对使用mysql_fetch_assoc()而不是mysql_fetch_array()感兴趣。)     

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


依赖报错 idea导入项目后依赖报错,解决方案:https://blog.csdn.net/weixin_42420249/article/details/81191861 依赖版本报错:更换其他版本 无法下载依赖可参考:https://blog.csdn.net/weixin_42628809/a
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下 2021-12-03 13:33:33.927 ERROR 7228 [ main] o.s.b.d.LoggingFailureAnalysisReporter : *************************** APPL
错误1:gradle项目控制台输出为乱码 # 解决方案:https://blog.csdn.net/weixin_43501566/article/details/112482302 # 在gradle-wrapper.properties 添加以下内容 org.gradle.jvmargs=-Df
错误还原:在查询的过程中,传入的workType为0时,该条件不起作用 &lt;select id=&quot;xxx&quot;&gt; SELECT di.id, di.name, di.work_type, di.updated... &lt;where&gt; &lt;if test=&qu
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct redisServer’没有名为‘server_cpulist’的成员 redisSetCpuAffinity(server.server_cpulist); ^ server.c: 在函数‘hasActiveC
解决方案1 1、改项目中.idea/workspace.xml配置文件,增加dynamic.classpath参数 2、搜索PropertiesComponent,添加如下 &lt;property name=&quot;dynamic.classpath&quot; value=&quot;tru
删除根组件app.vue中的默认代码后报错:Module Error (from ./node_modules/eslint-loader/index.js): 解决方案:关闭ESlint代码检测,在项目根目录创建vue.config.js,在文件中添加 module.exports = { lin
查看spark默认的python版本 [root@master day27]# pyspark /home/software/spark-2.3.4-bin-hadoop2.7/conf/spark-env.sh: line 2: /usr/local/hadoop/bin/hadoop: No s
使用本地python环境可以成功执行 import pandas as pd import matplotlib.pyplot as plt # 设置字体 plt.rcParams[&#39;font.sans-serif&#39;] = [&#39;SimHei&#39;] # 能正确显示负号 p
错误1:Request method ‘DELETE‘ not supported 错误还原:controller层有一个接口,访问该接口时报错:Request method ‘DELETE‘ not supported 错误原因:没有接收到前端传入的参数,修改为如下 参考 错误2:cannot r
错误1:启动docker镜像时报错:Error response from daemon: driver failed programming external connectivity on endpoint quirky_allen 解决方法:重启docker -&gt; systemctl r
错误1:private field ‘xxx‘ is never assigned 按Altʾnter快捷键,选择第2项 参考:https://blog.csdn.net/shi_hong_fei_hei/article/details/88814070 错误2:启动时报错,不能找到主启动类 #
报错如下,通过源不能下载,最后警告pip需升级版本 Requirement already satisfied: pip in c:\users\ychen\appdata\local\programs\python\python310\lib\site-packages (22.0.4) Coll
错误1:maven打包报错 错误还原:使用maven打包项目时报错如下 [ERROR] Failed to execute goal org.apache.maven.plugins:maven-resources-plugin:3.2.0:resources (default-resources)
错误1:服务调用时报错 服务消费者模块assess通过openFeign调用服务提供者模块hires 如下为服务提供者模块hires的控制层接口 @RestController @RequestMapping(&quot;/hires&quot;) public class FeignControl
错误1:运行项目后报如下错误 解决方案 报错2:Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.8.1:compile (default-compile) on project sb 解决方案:在pom.
参考 错误原因 过滤器或拦截器在生效时,redisTemplate还没有注入 解决方案:在注入容器时就生效 @Component //项目运行时就注入Spring容器 public class RedisBean { @Resource private RedisTemplate&lt;String
使用vite构建项目报错 C:\Users\ychen\work&gt;npm init @vitejs/app @vitejs/create-app is deprecated, use npm init vite instead C:\Users\ychen\AppData\Local\npm-