[英]How to use a loop variable outside the loop?
我试图在循环外使用$description
变量。 请帮我做。
<?php
$sql_album = "SELECT * FROM albums";
$res_album = mysql_query($sql_album) or die(mysql_error());
$albums = array();
$description = "";
while ($row_album = mysql_fetch_assoc($res_album)) {
$description = $row_album['description'];
$albums[$row_album['title']] = array(
'images/albums/'.$row_album['title'].'/1.jpg',
'images/albums/'.$row_album['title'].'/2.jpg',
'images/albums/'.$row_album['title'].'/3.jpg',
'images/albums/'.$row_album['title'].'/4.jpg'
);
}
foreach ($albums as $name => $a) {
?>
<div id="album">
<a href="view_album.php?name=<?php echo $name; ?>" data-images="<?php echo implode('|', array_slice($a,1))?>" class="album">
<img src="<?php echo $a[0]?>" alt="<?php echo $name?>" />
<span class="preloader"></span>
</a>
<div class="album_info">
<a href="view_album.php?name=<?php echo $name; ?>"><h4><?php echo $name?></h4></a>
<p><?php echo $description; ?></p>
</div>
</div>
<?php
}
?>
我应该弄一个数组,还是先定义一个数组,我很困惑,需要帮助。
在$albums
数组中(在while循环中),像这样存储图像和描述:
$albums[$row_album['title']] = array(
"description" => $row_album['description'],
"images" => array(
'images/albums/'.$row_album['title'].'/1.jpg',
'images/albums/'.$row_album['title'].'/2.jpg',
'images/albums/'.$row_album['title'].'/3.jpg',
'images/albums/'.$row_album['title'].'/4.jpg'
)
);
然后在您的foreach循环中,如下所示:
<img src="<?php echo $a['images'][0]?>" alt="<?php echo $name?>" />
和
<p><?php echo $a['description']; ?></p>
编辑:别忘了更改
array_slice($a,1)
对此:
array_slice($a['images'],1)
我将整个事情组合成一个循环; 以下代码未经测试,但希望您能照看。
while ($row_album = mysql_fetch_assoc($res_album)) {
print_album($row_album);
}
function print_album(array $album)
{
$name = htmlspecialchars($album['title'], ENT_QUOTES, 'UTF-8');
$description = htmlspecialchars($album['description'], ENT_QUOTES, 'UTF-8');
$view_link = sprintf('view_album.php?%s', http_build_query([
'name' => $album['title'],
]);
$images = array_map(function($index) use ($album) {
return sprintf(
'images/albums/%s/%d.jpg',
urlencode($album['title']),
$index
);
}, range(1, 4));
$images_data = htmlspecialchars(join('|', array_slice($images, 1)), ENT_QUOTES, 'UTF-8');
?>
<div id="album">
<a href="<?php echo $view_link ?>" data-images="<?php echo $images_data; ?>" class="album">
<img src="<?php echo htmlspecialchars($images[0], ENT_QUOTES, 'UTF-8'); ?>" alt="<?php echo $name; ?>" />
<span class="preloader"></span>
</a>
<div class="album_info">
<a href="<?php echo $view_link; ?>"><h4><?php echo $name; ?></h4></a>
<p><?php echo $description; ?></p>
</div>
</div>
<?php
}
我添加了使用urlencode()
, htmlspecialchars()
和http_build_query()
进行转义,以防止HTML潜在中断(或者XSS是最坏的情况)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.