我现在坚持了一段时间:我试图合并两个数组,一个是文件夹中的每个图像,另一个是SQL数据库中图片的描述。在数据库中,我添加了文件名和公寓名称。为了使我的查询工作,我需要它在一个循环中,但为了显示我的查询的结果,它需要成为一个循环,所以我认为它必须可以合并它吗?但我似乎无法弄清楚如何在循环中组合这两个数组。我尝试了两个循环,这就是我所拥有的:
<?php
$directory = "images/photos/";
$images = glob('images/photos/*.{jpg,png,gif}', GLOB_BRACE);
foreach ($images as $image) {
$sqlaa = "SELECT * FROM `afbeelding` WHERE filename = ' . $image . '";
$titles = mysqli_query($link, $sqlaa);
while ($row = $titles->fetch_array()) {
echo '<form action="" method="post"><li>
<a href="' . $image . '" title="' . $row['apartment'] . '" >
<img style="width:150px;height:150px;" src="' . $image . '" />
</a>
</li>';
}
}
?>
如果有人知道,那就太棒了! 提前致谢
答案 0 :(得分:2)
您可以尝试对数据进行循环,然后检查循环中的图像,这可能会更快,并避免在循环内使用查询。
<?php
$directory = "images/photos/";
//$images = glob('images/photos/*.{jpg,png,gif}', GLOB_BRACE);
$sqlaa = "SELECT filename,apartment FROM `afbeelding`";
$titles = mysqli_query($link, $sqlaa);
while($row = $titles->fetch_array())
{
$image=$row["filename"];
if (file_exists($directory.$image)){
echo '<form action="" method="post"><li>
<a href="'.$image.'" title="' . $row['apartment'] . '" >
<img style="width:150px;height:150px;" src="'.$image.'" />
</a>
</li>';
}
}
?>
我不知道图像是否使用完整的相对路径存储&#34; images / photos / img.png&#34;或仅基本文件名&#34; img.png&#34;。
如果afbeelding
中的数据很大,您可以使用IN过滤器改进SQL查询
function imageNames($item){
return "'$item'";
}
$images = glob('images/photos/*.{jpg,png,gif}', GLOB_BRACE);
$names=array_map("imageNames",$images);
$filter_names=implode(",",$names);
$sqlaa = "SELECT filename,apartment FROM `afbeelding` WHERE filename IN ($filter_names)";
然后继续循环,不检查文件。
答案 1 :(得分:1)
怎么样......以不同的方式进行。
您已在数据库中拥有文件名。
因此,只需使用可用数据轮询数据库,然后回显它。
我假设它在您的数据库中存储为images/photos/filename.jpg
。
但如果没有数据库中的数据样本,我就无法推测更多。
$directory = "images/photos/";
foreach ($images as $image) {
$sqlaa = "SELECT * FROM `afbeelding` WHERE filename like '%images/photos/%'";
$titles = mysqli_query($link, $sqlaa);
while ($row = $titles->fetch_array()) {
echo '<form action="" method="post"><li>
<a href="' . $image . '" title="' . $row['apartment'] . '" >
<img style="width:150px;height:150px;" src="' . $row['filename'] . '" />
</a>
</li>';
}
}
答案 2 :(得分:0)
首先:db-calls上的循环不是最佳实践..
您问题的可能结果:
<?php
$directory = "images/photos/";
$images = glob('images/photos/*.{jpg,png,gif}', GLOB_BRACE);
$images = array_flip($images);
// get data first
foreach($images as $image => $v) {
$sqlaa = "SELECT * FROM `afbeelding` WHERE filename = ' . $image . '";
$titles = mysqli_query($link, $sqlaa);
if ($title->num_rows == 1) {
$row = $titles->fetch_array();
$images[$image] = $row['apartment'];
} else {
$images[$image] = '';
}
}
// render data
foreach ($images as $filename => $description) {
echo '<form action="" method="post"><li>
<a href="'.$filename.'" title="' . $description . '" >
<img style="width:150px;height:150px;" src="'.$filename.'" />
</a>
</li>';
}
?>
不是很好,但很简单......