如何将两个数组组合成一个循环?

时间:2016-12-28 14:54:33

标签: php mysql sql loops

我现在坚持了一段时间:我试图合并两个数组,一个是文件夹中的每个图像,另一个是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>';
    }
}
?>

如果有人知道,那就太棒了! 提前致谢

3 个答案:

答案 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>';
}
?>

不是很好,但很简单......