如何通过php过滤任何给定数量的html标签

时间:2015-08-25 18:51:30

标签: php html image dom random

我正在开展一个项目,我希望随机显示任意给定数量的结果,我有六个<html>图像标记,我只想随机显示三个,这样每次我们都可以刷新它随机显示的任何三个图像的页面

我使用html代码作为示例

<html>
  <body>
    <div class=1>
      <a href="http://example1.com">
        <div>
          <img src="image1.jpg">
        </div>
      </a>
    </div>
    <div class=1>
      <a href="http://example2.com">
        <div>
          <img src="image2.jpg">
        </div>
      </a>
    </div>
    <div class=1>
      <a href="http://example3.com">
        <div>
          <img src="image3.jpg">
        </div>
      </a>
    </div>
    <div class=1>
      <a href="http://example4.com">
        <div>
          <img src="image4.jpg">
        </div>
      </a>
    </div>
    <div class=1>
      <a href="http://example5.com">
        <div>
          <img src="image5.jpg">
        </div>
      </a>
    </div>
    <div class=1>
      <a href="http://example6.com">
        <div>
          <img src="image6.jpg">
        </div>
      </a>
    </div>
  </body>
</html>

在这六张图片中我只想通过php显示任意三张图片。有可能,我该怎么做? 希望你能找到更好的解决方案。 此外,我想显示其他标签,如链接在图像和一些更多的标签,以便我可以通过CSS更好地显示图像,所以我认为它可以通过开关语句更容易完成

7 个答案:

答案 0 :(得分:5)

假设你有一个包含所有图像的数组。从该列表中,我们随机获取3个图像的键。然后我们通过一个循环回显出img标签:

<html>
<body>
<?php
$images = [
    'image1.jpg',
    'image2.jpg',
    'image3.jpg',
    'image4.jpg',
    'image5.jpg',
    'image6.jpg'
];

// Selects 3 random array values and returns the key for each value
$randomkeys = array_rand($images, 3);

// Here we loop through the given index keys from the $images array.
// For each key we will then get the value from $images with the index $key
foreach ($randomkeys as $key) {
    // I end with PHP_EOL (End of line) so the source code will look a bit prettier.
    echo "<div class=\"image\"><a href=\"{$images[$key]}\"><img src=\"{$images[$key]}\"></a></div>".PHP_EOL;
}
?>
</body>
</html>

如果有什么不清楚,请告诉我

编辑1:添加更多标签
向输出添加更多标签并不难。如果您知道如何回显字符串和变量,您应该能够轻松添加更多标签或以您希望的方式更改它们。

正如您在更新中看到的那样,我已将类image添加到,并将链接指向与图像相同的路径,因此当您单击它时,它将只在同一窗口中打开图像。

答案 1 :(得分:3)

<?php
  $images=array('image1.jpg','image2.jpg','image3.jpg','image4.jpg','image5.jpg','image6.jpg');
shuffle($images);
for($i=0;$i<=2;$i++){
 echo '<img src="'.$images[$i].'" />';
 }
?>

答案 2 :(得分:2)

刚刚扩展了 Morten 的代码:

<html>
<body>
<?php
$images = array(
    array('img' => 'image1.jpg', 'url' => 'http://example1.com', 'div' => 'class="d1"'),
    array('img' => 'image2.jpg', 'url' => 'http://example2.com', 'div' => 'class="d2"'),
    array('img' => 'image3.jpg', 'url' => 'http://example3.com', 'div' => 'class="d3"'),
    array('img' => 'image4.jpg', 'url' => 'http://example4.com', 'div' => 'class="d4"'),
    array('img' => 'image5.jpg', 'url' => 'http://example5.com', 'div' => 'class="d5"'),
    array('img' => 'image6.jpg', 'url' => 'http://example6.com', 'div' => 'class="d6"')
);

// Selects 3 random array values and returns the key for each value
$randomkeys = array_rand($images, 3);

// Here we loop through the given index keys from the $images array.
// For each key we will then get the value from $images with the index $key
foreach ($randomkeys as $key) {
    // I end with PHP_EOL (End of line) so the source code will look a bit prettier.
    echo '<div class="1">' . PHP_EOL . '<a href="' . $images[$key]['url'] . '">' . PHP_EOL . '<div ' . $images[$key]['div'] . '>' . PHP_EOL . '<img src="' . $images[$key]['img'] . '">' . PHP_EOL . '</div>' . PHP_EOL . '</a></div>' . PHP_EOL;
}
?>
</body>
</html>

结果: https://3v4l.org/OAc6l

答案 3 :(得分:0)

You can keep your src paths in an array. Then you can use array_rand() function to get random array index. 

For example:
<?php

$allImages = ["images1.jpg","images2.jpg","images3.jpg","images4.jpg","images5.jpg","images6.jpg"];

//this will return random keys of $allImages array
$randomKeys = array_rand($allImages, 3);

foreach($randomKeys as $key){ ?>
  <div><a href="#"><img src="<?php echo $allImages[$key] ?> " ></a></div>
<?php
}
?>

这是使用php

执行此操作的方法

答案 4 :(得分:0)

就像@AbraCadaver说的那样。

<?php
// vim: set ts=4 sw=4 et:

$myImages = array_map(function($i) { return "/foo$i.jpg"; }, range(1, 6));

foreach (array_map('htmlspecialchars', array_map(function ($i) { global $myImages; return $myImages[$i]; }, array_rand($myImages, 3))) as $image)
    echo "<img src=\"$image\"/>\n";

答案 5 :(得分:0)

在这种情况下,您的意思是如果页面已经准备好(可能是页面是外部网页,或者其他已经设计的页面),我会使用Simple Html DomDownload并将该文件夹包含在项目中。

<强> example.html的

<html>
<style>
img{
    width:100px;
    height:100px;
}
</style>
 <body>
<div class=1>
<a href="http://example1.com">
<div>                               
<img src="image (1).jpg" >                                     
</div>
</a></div>
<div class=1>
<a href="http://example2.com">
<div>                               
<img src="image (2).jpg" >                                     
</div>
</a></div>      <div class=1>
<a href="http://example3.com">
<div>                               
<img src="image (3).jpg" >                                     
</div>
</a></div>
<div class=1>
<a href="http://example4.com">
<div>                               
<img src="image (4).jpg" >                                     
</div>
</a></div>
<div class=1>
<a href="http://example5.com">
<div>                               
<img src="image (5).jpg" >                                     
</div>
</a></div>
<div class=1>
<a href="http://example6.com">
<div>                               
<img src="image (6).jpg" >                                     
</div>
</a></div>
 </body>
 </html>

<强> myphp.php

/**echo '<style>
img{
    width:100px;
    height:100px;
}
</style>';**/

//using Simple HTML DOM. This file is in Simple Html Dom folder downloaded
include('simple_html_dom.php');
// get DOM from URL or file
$html = file_get_html('example.html');// you can write your external website file here www.external.com/index.html

// find all link
foreach($html->find('a') as $e) 
    //echo $e->href . '<br>';
    $image_with_link['link'][]=$e->href;
// find all image
foreach($html->find('img') as $e)
    //echo $e->src . '<br>';
    $image_with_link['image'][]=$e->src;

//for debugging
//echo '<pre>';
//print_r($image_with_link);
//echo '</pre>';

//loop number of times, here i want to display three images
for($i=0;$i<3;$i++){
//get random key from array
$rand=array_rand($image_with_link['image'],1);

//print 3 images with its links
echo '<a href="'.$image_with_link['link'][$i].'" />';
echo '<img src="'.$image_with_link['image'][$i].'" />';
}

答案 6 :(得分:0)

将代码视为一个大字符串。从该字符串中删除<HTML></HTML><BODY></BODY>。您可以随时添加它们。接下来,在"<DIV "周围展开字符串。对于创建的数组,将"<DIV "添加到每个元素的开头。您现在有一个包含每个div部分的数组,其中包含您想要的每个图像和链接。然后,您可以从该数组中随机选择一个并根据需要插入:

// remove HTML and BODY tags
    $remove1 = str_replace("<HTML>", "", $original);
    $remove2 = str_replace("<BODY>", "", $remove1);
    $remove3 = str_replace("</HTML>", "", $remove2);
    $cleaned = str_replace("</BODY>", "", $remove3);

// explode remaining code around "<DIV " so we have each division for each image
    $codeArray = explode("<DIV ", $cleaned);

// with our code sectioned in an array, add "<DIV " back to the start
// of each element in the array
    for ($x = 0; $x < count($codeArray); $x++){
        $codeArray[$x] =. "<DIV ";
    }

// the $codeArray now has $x elements of the sections that contain the 
// links and images you want.
// You can now randomly grab the div's that you want, by
// Shuffling that array, pick the first X images you want, and then
// echo back out the code you want.
    shuffle($codeArray);
    echo "<HTML>";
    echo "<BODY>";
    for ($x = 0; $x < $whateverNumberOfImagesYouWant; $x++){
        echo $codeArray[$x];
    }
    echo "</BODY>";
    echo "</HTML>";