我正在努力弄清楚如何在这个html中创建一个以随机方式显示图像的PHP代码,以及href链接,alt属性和标题。
<ul>
<li>
<img src="http://www.prevention.com/sites/default/files/imagecache/102x104/images/news/featured_images/156854573-raw-meat-lab-628x363.jpg" alt="" title="" class="imagecache imagecache-102x104" height="104" width="102">
<p> <a href="/food/healthy-eating-tips/theres-test-tube-burger-your-future">There?s A Test-Tube Burger In Your Future</a>
</p>
</li>
<li>
<img src="http://www.prevention.com/sites/default/files/imagecache/102x104/images/news/featured_images/86541117-grocery-shopping-produce-organic-label-mixed-greens-lg.jpg" alt="" title="" class="imagecache imagecache-102x104" height="104" width="102">
<p> <a href="/food/smart-shopping/connecticut-gmo-labeling-law">GMOs?Exposed!</a>
</p>
</li>
</ul>
这是我的PHP代码。
<?php
$images = array('healthyfoods', 'mood7', '15_heart',
'healthyf', 'visuals', 'healthyd', 'health01', 'crackers',
'mmo', 'oo1', 'mushrooms', 'raw', 'vegetable', 'heal',
'139572961', '3889');
$i = rand(0, count($images)-1);
$selectedImage = "../../images/main_body_image/{$images[$i]}.jpg";
?>
答案 0 :(得分:2)
使用PHP的rand()
函数生成随机数,然后使用该数字来确定要显示的图像。
编辑:
如果变量包含数组索引,则无法将变量嵌入到PHP字符串中,它只是不起作用,您需要手动连接字符串,{}
括号将直接打印到您的字符串中你不想要,所以把它们拿出来:
$selectedImage = "../../images/main_body_image/" . $images[$i] . ".jpg";
获得所需的图片$selectedImage
后,您可以通过echo
// In the middle of your html code where you want to display your random image:
<?php echo '<img src="$selectedImage" height="104" width="102">'; ?>
echo
使PHP真正将该文本打印到HTML中,因此它应该是HTML格式。
答案 1 :(得分:1)
我会告诉你我会做什么:
1b中。如果你有很多图像(100+),只需在数组中加入有限的数据以获得更好的性能。限制用于获取图像文件路径的函数中的返回金额(Database Query或文件系统,例如scandir()
,glob()
或DirectoryIterator
) < / p>
1c上。我建议您将图像数据存储在MySQL数据库中。它更快,你可以用它做更多。请参阅下面的示例。
shuffle()
foreach()
循环播放数组并echo
图片
<?php
$images = array();
// Get the images (just for this example, do it however you like).
// With sql queries ORDER BY RAND() could be used to randomize the results returned, but
// it depends on the amount of data stored in the db. The more the slower the query will be.
$database->query('SELECT id, name, title, url, anchor_text, path FROM featured_images ORDER BY id LIMIT 10');
// Randomize the images
shuffle($images);
// Echo the randomized images
echo '<ul>';
foreach ($images as $image)
{
echo '<li>';
echo '<img src="'.$image->path.'" alt="" title="'.$image->title.'" class="...>';
echo '<p><a href="'.$image->url.'">'.$image->anchor_text.'</a></p>';
echo '</li>';
}
echo '</ul>';
在示例代码中,我使用了基本的SQL查询。要使用SQL的本机RAND(),可以使用以下查询(请注意,LIMIT 10是可选的,但建议在表包含大量图像时使用,因此根据您的需要调整10)(同样从以上关于性能的示例中的sql查询中读取注释:
SELECT id, title, path FROM featured_images WHERE id IN(SELECT id FROM featured_images ORDER BY RAND() LIMIT 10)
我不知道你是如何从中获取图像数据的,但是从目录中读取数据可以像这样完成(请注意,这种方法不能包含标题和锚文本,请使用来自上面的例子,因为它也更快):
$dir = new DirectoryIterator("/path/to/images");
foreach ($dir as $file)
{
$images[] = array(
'path' => $file->getPath(), // file path w/o filename
'name' => $file->getFilename(),
);
}
尝试一下,随意使用它并阅读PHP的手册(我将功能名称与相应的手册页链接在一起)。
我正在根据提问者this comment更新此答案以提供an array only solution
:
嗨Markus,我没有使用db,因为它只有几张图片,你能不能给我一些关于在foreach循环中编写代码的提示,以防我们使用数组?谢谢,Anay
好的,所以你想要使用少量图像的数组。我假设您将"hard-coding"数据放入脚本中。我们走了:
<?php
// Since the image paths given in your example both conside in the same directory,
// you can create a base_path variable to prevent repeating the path over and over again
$imgBasePath = 'http://www.prevention.com/sites/default/files/imagecache/102x104/images/news/featured_images/';
// Create the array containing the required image data (hard-coded)
$images = array(
array(
'path' => $imgBasePath . '156854573-raw-meat-lab-628x363.jpg',
'title' => '',
'width' => '102',
'height' => '104',
'link_url' => '/food/healthy-eating-tips/theres-test-tube-burger-your-future',
'link_text' => 'There\'s A Test-Tube Burger In Your Future',
),
array(
'path' => $imgBasePath . '86541117-grocery-shopping-produce-organic-label-mixed-greens-lg.jpg',
'title' => '',
'width' => '102',
'height' => '104',
'link_url' => '/food/smart-shopping/connecticut-gmo-labeling-law',
'link_text' => 'GMOs-Exposed!',
),
);
// Now loop through the $images array and create the desired list
// I'm putting the html into a var to be more flexible of where to echo the created html
$html = '';
foreach ($images as $image)
{
$html .= '<li>';
$html .= '<img src="'.$image['path'].'" alt="" title="'.$image['title'].'" class="imagecache imagecache-102x104" width="'.$image['width'].'" height="'.$image['height'].'">';
$html .= '<p><a href="'.$image['link_url'].'">'.$image['link_text'].'</a></p>';
$html .= '</li>';
}
// Finally echo the list to the browser
echo '<ul>'.$html.'</ul>';
Hard-coded表示您将数据放入未动态更改的脚本中。从数据库中获取数据可以更改(例如更新或添加),因此它是动态的。在示例中完成的方式称为硬编码。
The foreach loop遍历$ images数组并返回循环内的每个$ image。要访问$ image数据,请使用$image['path']
之类的数据。非常直接。
这是如何创建数组并在foreach循环中使用它们的基本示例。
快乐的编码。
答案 2 :(得分:0)
<?php
define ('CRLF' , "\r\n");
$images = array('healthyfoods|text desc1',
'mood7|text desc2',
'15_heart|text desc3',
'healthyf|text desc4',
'visuals|text desc5',
'healthyd|text desc6'); // you get the idea
$i = mt_rand(0, count($images)-1);
list ($filename, $alttext) = explode("|", $images[$i]);
$selectedImage = "../../images/main_body_image/" . $filename . ".jpg";
list($width, $height, $type, $attr) = getimagesize($selectedImage);
$ho = ' <img src="' . $selectedImage . '" alt="' . $alttext . '" title="' . $alttext . '" ' . $attr . ' />' . CRLF;
?>
并在您的HTML代码中:
<ul>
<li>
<?php echo $ho; ?>
<p> ...