使用PHP+Mysql对目录中的文件进行排序
嗨 基本上我有一个图像传送带,每个图像动态链接到文章。 我有一个脚本,可以读取目录,将文件名存储到数组中。 然后我删掉文件扩展名,通过搜索具有相同/相似名称的文章,在数据库中查询我希望图像链接到的文章。 e、 g:blets.jpg链接到皮带文章。 所以我成功了 但是我想做的是能够按照我的文章在排序栏中分配给它们的顺序显示图像 我现在获取图像并按字母顺序显示它们,我尝试的是按照我为文章指定的顺序显示它们 这是我的代码:使用PHP+Mysql对目录中的文件进行排序,php,mysql,Php,Mysql,嗨 基本上我有一个图像传送带,每个图像动态链接到文章。 我有一个脚本,可以读取目录,将文件名存储到数组中。 然后我删掉文件扩展名,通过搜索具有相同/相似名称的文章,在数据库中查询我希望图像链接到的文章。 e、 g:blets.jpg链接到皮带文章。 所以我成功了 但是我想做的是能够按照我的文章在排序栏中分配给它们的顺序显示图像 我现在获取图像并按字母顺序显示它们,我尝试的是按照我为文章指定的顺序显示它们 这是我的代码: echo "<div id='carousel'>\n
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", 0, 1) != ".") //don't list hidden files
{
$name = substr($file, 0, 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
我在代码中留下了我的注释。
我基本上知道需要做什么,只是不知道怎么做。
我需要一个专家!?帮助。我建议您按原样获取文件名,但要分别执行查询和渲染。每次查询文件信息时,都应将该信息作为对象/数组存储到另一个数组中。完成所有查询后,可以根据排序值进行排序。最后,您将迭代该数组并呈现结果
希望这有帮助,如果您需要更详细的信息,请告诉我。如果我理解正确,则无需读取目录并将图像存储在阵列中 您只需查询数据库,以获取要按所需顺序显示的文章集合,然后将.jpg添加到文章名称中,以获取图像的名称
另一个优点是,您只需为所有文章查询一次数据库,而无需为每篇文章执行单独的查询。您可以首先获取数组中的所有行,然后使用根据特定条件对它们进行排序:
$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作为关联数组,您可能还对使用over感兴趣。好吧
$Line[] = array();
foreach ($dirArray as $file)
{
if (substr("$file", 0, 1) != ".") //don't list hidden files
{
$name = substr($file, 0, 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";
}
老鹰着陆了。好的,我得到了AR的解决方案,可以顺利工作
@本杰明,我也让你的工作,但我必须把函数从foreach循环中去掉
并将其更改为:
usort($rows, function($a, $b)
{
return $a > $b ? 1 : -1;
});
然后它成功了
我从这次经历中学到了很多,所以我感谢大家。
你真的帮助我进一步了解了数组
现在它在我的测试服务器LAMP上运行良好,但想想看,它在Godaddy的服务器上不起作用。哎哟
和平。但我同意杰罗恩的观点——将图像列在db中更有意义。您甚至可以在单独的列中包含与项目相关的图像的URL以及别名、顺序等。。这样,在运行查询后,还可以将图像url作为变量准备好。在数据库方面这是一项额外的工作,但会使编码更加容易,而且可能会使脚本运行得更快。我同意,整个设计本身并不高效。不过,我相信他只是想要一些基本的建议,让它暂时发挥作用。谢谢各位,我会努力的,一旦我尝试了你们的建议,我会回复你们的。我同意,最好的办法是把图片的url放在一个单独的栏中,我也会这样做,但我正在努力使我可以正确命名文件,上传到文件夹,代码会完成其余的工作。我明白你的意思…但我只是没有知识或经验来完成它。我正在考虑在查询后添加一个foreach。。。我仍然很难将我的大脑围绕在多维阵列上。但塔恩克希望得到及时的答复和帮助。