php - 根据ID提取图片

标签 php html css

我有一个 slider (flexslider),我用它以下面 jsfiddle 中显示的形式显示图像...我优化了 slider ,以便它从某个目录动态提取图像。它有效并且正在提取所有图像。 现在在我的文件夹中,图像被命名为 1023 、 2045 、 304654 、 50 等... 我如何指定以“1”开头的图像(可以是 14、1040、10000.100000 等...)是仅提取的图像?

更新(更多说明):我根据每个图像名称的第一位数字提取的原因是因为我将在我的菜单的所有元素中使用 slider 。因此,如果我单击以 1 开头的元素“aaaa”图像,如果我单击以 2 开头的“bbbbbb”图像,则会出现,依此类推。

JSFIDDLE:https://jsfiddle.net/atkumqpk/1/

PHP代码:

         function get_slide_images($folder, $images_per_slide = 10)
{

    $slide_images = false;

    if (file_exists($folder)) {

        // valid extensions
        $extensions = array(
            "jpg",
            "gif",
            "jpeg",
            "svg",
            "png",
            "bmp"
        );

        foreach (new DirectoryIterator($folder) as $file_key => $file) {

            // Don't bother
            if (!in_array($file->getExtension(), $extensions)) {
                continue;
            }

            // Grab file details
            $filename    = $file->getFilename();
            $file_folder = $folder . "/" . $filename;

            // Store the image to the Slide
            $slide_images[$filename] = "<img src='{$file_folder}' alt='{$file_folder}' />";

        }

        if (!empty($slide_images)) {
            ksort($slide_images);
            $slide_images = array_chunk($slide_images, $images_per_slide);
        }

    }
    return $slide_images;
}

//end of php 

        <div id="logo" class="logo" ><img src="logo.png"/></div>
        <p class="custom-class"><a href="">Go to the main website</a></p>

        <div id="menu" class="menu">
        <ul class="headlines">
              <li id="item1">
        <button>aaaaaaaa</button>
    </li>
    <li id="item2">
        <button>bbbbbbb</button>
    </li>
    <li id="item3">
        <button>ccccccc</button>
    </li>
    <li id="item4">
        <button>dddddddd</button>
    </li>
    <li id="item5">
        <button>eeeeeee eee.</button>
    </li>
    <li id="item6">
        <button>ffffff</button>
    </li>
    <li id="item7">
        <button>ggggggg</button>
    </li>

        </ul>
        </div>


     <div id="container">
<div id="first" class="inner-container">
   <div id="item11" class="item"> <a name="item11"></a>

                <div class="flexslider">

  <ul class="slides">



$slider_kvp = get_slide_images("images", 10);

/**
* Here we are going to generate the SLIDES
*/
if($slider_kvp) {

    $slider_list_html = array();

    foreach($slider_kvp as $slider_key => $slide_images) {

        $html_LI_list = "";
        $html_LI_list = "<li>";

        // Go through each image ...
        foreach($slide_images as $image_key => $image_value) {
            $html_LI_list .= $image_value;
        }

        $html_LI_list .= "</li>";

        $slider_list_html[$slider_key] = $html_LI_list;

    }

    // OUR SLIDES!
    $rendered_slider_list_html = implode(' ', $slider_list_html);
    echo "<ul class='slides'>{$rendered_slider_list_html}</ul>";

}



  </ul>
</div>
            </div>
        </div>
    <div id="second" class="inner-container">
      <div id="item22" class="item"> <a name="item22"></a>

              <div class="flexslider">
  <ul class="slides">



$slider_kvp = get_slide_images("images", 10);

/**
* Here we are going to generate the SLIDES
*/
if($slider_kvp) {

    $slider_list_html = array();

    foreach($slider_kvp as $slider_key => $slide_images) {

        $html_LI_list = "";
        $html_LI_list = "<li>";

        // Go through each image ...
        foreach($slide_images as $image_key => $image_value) {
            $html_LI_list .= $image_value;
        }

        $html_LI_list .= "</li>";

        $slider_list_html[$slider_key] = $html_LI_list;

    }

    // OUR SLIDES!
    $rendered_slider_list_html = implode(' ', $slider_list_html);
    echo "<ul class='slides'>{$rendered_slider_list_html}</ul>";

}


  </ul>
</div>
            </div>
        </div>

最佳答案

有多种方法可以实现这一点,但一种方法是过滤您的函数正在迭代的文件名。代替 foreach (new DirectoryIterator($folder) as $file_key => $file) { ... } block ,你可以这样做:

foreach (glob($folder.'/'.'1*') as $filename) {
    $slide_images[$filename] = "<img src='{$filename}' alt='{$filename}' />";
}

glob 位匹配 $folder 中以“1”开头的所有内容(您也可以通过指定将其限制为 PNG,例如“1* .png")

这样做的好处是只查看您实际需要的文件,这比遍历所有内容并查看其文件名的替代方法更有效。

更新:如果您希望能够更改“开头为”过滤器(因此它并不总是“1”),您可以向您的函数添加一个额外的参数,如下所示:

function get_slide_images($folder, $images_per_slide = 10, $starts_with = '') {

...然后更改 foreach 部分(上面),以便它使用它:

foreach (glob("{$folder}/{$starts_with}*") as $filename) {

...然后你可以这样调用你的函数:

$slider_kvp = get_slide_images("images", 10, "1");

...其中第三个参数(“1”)指定您想要的文件应该以什么开头。 (如果您在不使用第三个参数的情况下调用该函数,您将获得文件夹中的所有文件,就像您目前所做的那样)。所以您的 get_slide_images 函数可能类似于:

function get_slide_images($folder, $images_per_slide = 10, $starts_with = '')
{

    $slide_images = false;

    // valid extensions
    $extensions = array(
        "jpg",
        "gif",
        "jpeg",
        "svg",
        "png",
        "bmp"
    );

    // Implode the extensions array into a string:
    $extensions = implode(',', $extensions);

    if (file_exists($folder)) {

        // Get all the files with a valid extension in $folder:
        // (optionally filtered by $starts_with)
        foreach (glob($folder.'/'.$starts_with.'*.{'.$extensions.'}', GLOB_BRACE) as $filename) {
            $slide_images[$filename] = "<img src='{$filename}' alt='{$filename}' />";
        }

        if (!empty($slide_images)) {
            ksort($slide_images);
            $slide_images = array_chunk($slide_images, $images_per_slide);
        }

    }

    return $slide_images;
}

关于php - 根据ID提取图片,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31060168/

相关文章:

jquery - 图像链接高度在 Firefox 中无法正确呈现

php rss feed 字符编码 多语言 feed 项目

php - 为什么这个变量不起作用?查询

php - MySQL Left join 使查询非常慢......我该如何重构?

html - 仅使用 css 将表格从一个位置移动到另一个位置

jquery - 如何在依赖于另一个字段的文本框上绑定(bind)动态屏蔽格式

javascript - 在不使用 JavaScript 且不加载静态工具包的情况下加载单个 TypeKit 字体系列

php - 如何仅显示 mysql_fetch_array 中的某些字符

html - 是否可以在字体系列列表中包含字体样式?

html - 带有站点长容器的粘性页脚