2016-12-28 138 views
0

我在這裏暫停了一段時間:我試圖結合兩個數組,一個是文件夾中的每個圖像,另一個是來自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

你在每張圖片的「afbeelding」表中有一行嗎? –

+1

您可以通過$圖像刪除循環。而不是'WHERE filename = $ value',你可以做'WHERE filename IN($ listOfValues)'。一般來說,我發現必須做一個涉及重複查詢的循環意味着我要麼設計我的數據庫很差,要麼我可以修改我的查詢來一次獲取所有數據。 –

+0

@VitaliiStrimbanu當然,文件名和公寓,所以每個文件都可以鏈接到一個房間 – Casper

回答

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>'; 
    } 
} 
+1

你說的沒錯,@VitaliiStrimbanu也非常感謝你,你是對的。我覺得太困難了 – Casper

0

第一:循環分貝的通話都算不上最佳實踐..

一個可能的結果你的問題:

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

不是真的不錯,但樸素簡單..

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

如果圖像是使用完整的相對路徑「圖像/照片/ img.png」或基本文件名唯一的「img.png」預存我不知道。

如果afbeelding數據是巨大的,可以提高使用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)"; 

然後用循環繼續,而不檢查文件。