2016-12-28 3 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

Возможно, вам удастся удалить цикл через $ images. Вместо 'WHERE filename = $ value' вы можете сделать' WHERE filename IN ($ listOfValues) '. В общем, я считаю, что выполнение цикла с использованием повторного запроса означает, что я либо плохо разработал мою базу данных, либо могу пересмотреть свой запрос, чтобы сразу получить все данные. –

+0

@VitaliiStrimbanu Ofcourse, имя файла и квартира, поэтому каждый файл можно связать в квартире – Casper

ответ

1

Как насчет ... обойти это по-другому.

У вас уже есть имена файлов в базе данных. Так что просто опросите свою базу данных с имеющимися данными, а затем просто эхо-сигнал. Я assuiming он хранится как 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

первый: петли на DB-звонки на самом деле не лучше практика ..

Возможный результат на ваш вопрос:

<?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)"; 

А затем продолжить цикл, без проверки файлов.

Смежные вопросы