Извлечение изображений на основе идентификатора

У меня есть слайдер (flexslider), который я использую для отображения изображений в форме, показанной ниже в jsfiddle... Я оптимизировал слайдер, чтобы он извлекал изображения динамически из определенного каталога. Он работал, и все изображения извлекаются. Теперь в моей папке изображения называются 1023, 2045, 304654, 50 и т.д.... Как я могу указать, что изображения, которые начинаются с разрешения "1" (может быть 14, 1040, 10000.100000 и т.д.), Являются только извлеченными?

Обновление (более подробное пояснение): причина, по которой я извлекаю на основе первой цифры имени каждого изображения, заключается в том, что я собираюсь использовать ползунок во всех элементах моего меню. Таким образом, если я нажимаю на элемент "aaaa", изображения, начинающиеся с 1, появляются, если я нажимаю на "bbbbbb" изображения, начинающиеся с 2, и т.д.

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>

Ответ 1

Существуют различные способы достижения этого, но один из способов - отфильтровать имена файлов, которые выполняет ваша функция. Вместо блока foreach (new DirectoryIterator($folder) as $file_key => $file) { ... } вы можете сделать что-то вроде:

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;
}

Ответ 2

Разве это не решение этого, а не просто его фильтрация на стороне сервера?

Чтобы сделать функцию более гибкой (вместо фильтрации только 1):

<?php
function get_slide_images($folder, $images_per_slide = 10, $pattern = "")
{
    $slide_images = false;

    if (!file_exists($folder))
        return $slide_images;

    // 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();
        if ($pattern && !preg_match($pattern, $filename))
            continue;
        $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;
}

и теперь вы можете запустить его с помощью:

get_slide_images('images',10,'/^1/'); // get everything starting with 1
get_slide_images('images',10,'/^1234/'); // get everything starting with 1234

надеюсь, что это то, что вы ищете.

Ответ 3

Если вам нужно условие для проверки:

<?php
  function starts_with ($filename, $start)
    if (substr($filename, 0, 1) == $start)
      return true;
    return false;
  }
?>

Ответ 4

в php, я просто проверю

if ("1" !== substr($filename, 0, 1)) {
    continue;
}

во время DirectoryIterator