如何解决使用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 举报,一经查实,本站将立刻删除。