php随机图片,链接,文字,

时间:2013-08-08 18:38:38

标签: php

我正在努力弄清楚如何在这个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";
?>

3 个答案:

答案 0 :(得分:2)

使用PHP的rand()函数生成随机数,然后使用该数字来确定要显示的图像。

编辑:

如果变量包含数组索引,则无法将变量嵌入到PHP字符串中,它只是不起作用,您需要手动连接字符串,{}括号将直接打印到您的字符串中你不想要,所以把它们拿出来:

$selectedImage = "../../images/main_body_image/" . $images[$i] . ".jpg";

获得所需的图片$selectedImage后,您可以通过echo

创建所需的HTML代码
// 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)

您的问题有很多可能的解决方案。

我会告诉你我会做什么:

  1. 创建一个包含您想要随机显示的图像数据的数组

    1b中。如果你有很多图像(100+),只需在数组中加入有限的数据以获得更好的性能。限制用于获取图像文件路径的函数中的返回金额(Database Query或文件系统,例如scandir()glob()DirectoryIterator < / p>

    1c上。我建议您将图像数据存储在MySQL数据库中。它更快,你可以用它做更多。请参阅下面的示例。

  2. 然后随机化图像的顺序,您可以使用类似shuffle()

  3. 的内容
  4. 使用foreach()循环播放数组并echo图片

  5. 因此,例如:

    <?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> ...