2013-09-30 5 views
1

У меня есть петля foreach php, в которой перечислены истории новостей, извлеченные из MySQL, так как часть цикла печатается, а затем под запросом выполняется, чтобы вытащить, а затем отобразить любые изображения, прикрепленные к история. Это упрощенная версия:Вставка результатов запроса в строку php во время цикла foreach

foreach ($res AS $row) { 
    printf('<p>%s</p>' . PHP_EOL, nl2br($row['story'])); 


    $qry3 = "select * from tpf_images where news_id=".$row['news_id']; 
    $res3 = $pdo->query($qry3); 


    foreach ($res3 AS $row3) { 

     printf('<a href="/images/%s%s.jpg" rel="lightbox[%s]" title="%s. Photo Credit - %s" > 
     <img src="/images/%s%s-thumb.jpg" style="max-height: 250px; max-width: 250px" alt="%s"/></a>' . PHP_EOL, $row3['url'], $row3['alt'], $row['headline'], $str ,$row3['credit'], $row3['url'], $row3['alt'], $row3['alt']); 
    } 
} 

Это прекрасно работает, но означает, Вместо этого я пытаюсь добиться того, чтобы изображения были распечатаны как часть текста сюжета в начале каждого абзаца. История печатается с nl2br($row['story']), с использованием nl2br абзац достигается с <br /><br />. Так есть ли способ для PHP для сканирования nl2br($row['story']) и если он находит <br /><br /> вставляет текст, я использую для Еогеасп изображения:

printf('<a href="/images/%s%s.jpg" rel="lightbox[%s]" title="%s. Photo Credit - %s" > 
<img src="/images/%s%s-thumb.jpg" style="max-height: 250px; max-width: 250px" alt="%s"/></a>' . PHP_EOL, $row3['url'], $row3['alt'], $row['headline'], $str ,$row3['credit'], $row3['url'], $row3['alt'], $row3['alt']); 

Таким образом, изображения будут отображаться в тексте, а Thn под ним. Если в результате получилось больше изображений, чем <br /><br />, остальные изображения будут распечатаны после истории, как раньше.

Спасибо за любую помощь в этом, как я полностью тупик (также, не был уверен, что название должно быть так, что может быть отредактирован, чтобы лучше удовлетворить в случае необходимости)

EDIT: попытаться сделать вопрос яснее, nl2br($row['story']) найти <br /><br />. Если будет установлено, что заменяется <br /><image><br /> с проецирование изображения, код я использую для отображения изображений, который является:

<a href="/images/%s%s.jpg" rel="lightbox[%s]" title="%s. Photo Credit - %s" > 
     <img src="/images/%s%s-thumb.jpg" style="max-height: 250px; max-width: 250px" alt="%s"/></a>' . PHP_EOL, $row3['url'], $row3['alt'], $row['headline'], $str ,$row3['credit'], $row3['url'], $row3['alt'], $row3['alt'] 
+0

Так что вы хотите сделать, это собрать все изображения, а затем сделать петлю, что найти и заменяющий

тег с

? – nycynik

+0

да, в основном. – user2574794

+0

проверить мой обновленный ответ. – OneOfOne

ответ

2

Почему бы не добавить
непосредственно в PRINTF линии?

printf('<a href="/images/%s%s.jpg" rel="lightbox[%s]" title="%s. Photo Credit - %s" > 
<img src="/images/%s%s-thumb.jpg" style="max-height: 250px; max-width: 250px" alt="%s"/></a><br>' . PHP_EOL, $row3['url'], $row3['alt'], $row['headline'], $str ,$row3['credit'], $row3['url'], $row3['alt'], $row3['alt']); 

Или еще лучше, использовать CSS стиль его, например:

echo '<div class="images">'; 
foreach ($res3 AS $row3) { 

    printf('<a href="/images/%s%s.jpg" rel="lightbox[%s]" title="%s. Photo Credit - %s" > 
    <img src="/images/%s%s-thumb.jpg" style="max-height: 250px; max-width: 250px" alt="%s"/></a>' . PHP_EOL, $row3['url'], $row3['alt'], $row['headline'], $str ,$row3['credit'], $row3['url'], $row3['alt'], $row3['alt']); 

} 
echo '</div>'; 

CSS:

div.images a { display: block; } 

Если я совершенно не понял вопроса.

Edit ::

Видел вашу правку, вам нужно использовать Sprintf вместо:

foreach ($res AS $row) { 
    $story = '<p>' . preg_replace("/\n|\n\r|\n\r/", '<br>', $row['story']) . '</p>' . PHP_EOL; 


    $qry3 = "select * from tpf_images where news_id=".$row['news_id']; 
    $res3 = $pdo->query($qry3); 

    $images = ''; 
    foreach ($res3 AS $row3) { 
     $images .= sprintf('<a href="/images/%s%s.jpg" rel="lightbox[%s]" title="%s. Photo Credit - %s" > 
     <img src="/images/%s%s-thumb.jpg" style="max-height: 250px; max-width: 250px" alt="%s"/></a>' . PHP_EOL, $row3['url'], $row3['alt'], $row['headline'], $str ,$row3['credit'], $row3['url'], $row3['alt'], $row3['alt']); 
    } 
    $story = preg_replace('/<br><br>/', '<br>' . $images . '</br>', $story); 
} 
+0

кажется, что он движется в правильном направлении, и извините за то, что не ясно в вопросе. Я копирую/вставляю код и получаю ошибки 'Warning: preg_replace() [function.preg-replace]: разделитель не должен быть буквенно-цифровым или обратным слэш в /home3/danville/public_html/test5/index.php в строке 86 Предупреждение : preg_replace() [function.preg-replace]: Неизвестный модификатор '<' в /home3/danville/public_html/test5/index.php в строке 97' – user2574794

+0

oh мой плохой, у меня еще не было кофе 'preg_replace («/ \ n | \ n \ r | \ n \ r /", '
', $ row ['story']) ' – OneOfOne

+0

думаю, что мы почти там, спасибо за это! Получите аналогичную ошибку для другой строки '$ story = preg_replace ('

', '
'. $ Images. '
', $ story);' - 'Предупреждение: preg_replace() [function.preg-replace]: Неизвестный модификатор '<' в /home3/danville/public_html/test5/index.php в строке 97' – user2574794

0

user2574794. То, что вы запрашиваете, не совсем «ясно».

Кстати, почему вы не используете простую str_replace()? Что-то вроде:

str_replace('<br /><br />', '<br /><br />blabla', nl2br($row['story'])); 
0

использовать str_replace() функцию, чтобы удалить <br/> «s

удалить строки разрыва:

str_replace(array('<br>','<br/>','',strtolower($row['story']))) 

размещаем историю внутри <span> и текст-выровнять <span> s и <img> s слева.

Я бы порекомендовал вам использовать <li> сек, так как очень легко укладывать его (вертикальный и горизонтальный текст выравнивается)

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