Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/257.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何在循环外使用循环变量?_Php_Arrays_Variables_Loops_While Loop - Fatal编程技术网

Php 如何在循环外使用循环变量?

Php 如何在循环外使用循环变量?,php,arrays,variables,loops,while-loop,Php,Arrays,Variables,Loops,While 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 =

我试图在循环外使用
$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'
    )
);
<img src="<?php echo $a['images'][0]?>" alt="<?php echo $name?>" />
然后在foreach循环中,按如下方式操作:

$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'
    )
);
<img src="<?php echo $a['images'][0]?>" alt="<?php echo $name?>" />
为此:

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
}
while($row\u album=mysql\u fetch\u assoc($res\u album)){
打印相册($row\u相册);
}
功能打印相册(数组$album)
{
$name=htmlspecialchars($album['title',ENT_引号,'UTF-8');
$description=htmlspecialchars($album['description'],ENT_引号,'UTF-8');
$view\u link=sprintf('view\u album.php?%s',http\u build\u query([
'name'=>$album['title'],
]);
$images=数组\映射(函数($index)使用($album){
回程冲刺(
'图片/相册/%s/%d.jpg',
urlencode($album['title']),
美元指数
);
},范围(1,4));
$images_data=htmlspecialchars(join('|',array_slice($images,1)),ENT_引号,'UTF-8');
?>


访问
$description
对您没有帮助。想想看,它只具有
while
循环的最后一次迭代的值。您将无法获得相应映像的值。
mysql*
函数不再被维护,不应在任何新的代码库中使用。它正在逐步淘汰支持更新的API。相反,您应该使用或中的任何一个。谢谢,它工作得很好。我可能会这样做,但我缺乏逻辑:P