2015-06-25 108 views
11

我有一個滑塊(flexslider),我用來顯示圖像顯示在下面的jsfiddle顯示圖像...我優化了滑塊,以便它從一個特定的目錄動態提取圖像。它工作並且所有圖像都被提取出來。 現在我的文件夾中的圖像被命名爲1023,2045,304654,50等... 我怎樣才能指定圖像開始讓我們說「1」(可以是14,1040,10000.100000等...)是隻提取?基於ID提取圖像

更新(更多說明):我基於每個圖像的名稱的第一個數字提取的原因是,因爲我要在我的菜單的所有元素中使用滑塊。因此,如果我點擊元素「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> 
+0

你必須在'1023,2045,304654名圖像,50'所以你get_slide_images功能可能看起來像。好的。那麼'1'是什麼,你想做什麼? –

+0

@PraveenKumar圖像被命名爲不同的數字,我想根據其fulll數字的第一個數字來提取它們。例如:10,154,10056,1304 ...被提取,因爲它們以1開頭。 – mikeb

+0

發生了什麼?用你的代碼? –

回答

13

實現此目的有多種方式,但一種方法是過濾函數正在迭代的文件名。取而代之的是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」)指定所需的文件應該以什麼開始。(如果你沒有第三個參數來調用函數,你會得到文件夾中的所有文件,就像你現在所做的那樣)。如果你需要一個條件檢查

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

我打算在菜單的所有元素中使用滑塊,因此結果需要不同。如果我點擊菜單的第一個元素,那麼從1開始的圖像將被提取出來,第二個元素與2等圖像...我相信你的解決方案,使我無論在哪裏我的滑塊相同的元素將出現,如何改變它? – mikeb

+0

你可以用一個變量替換硬編碼爲「1」的那個位,並且使你的函數的第三個參數。例如。 '水珠($文件夾中。 '/'。$過濾器。 '*')'。然後調用該函數,例如。 'get_slide_images(「images」,10,「1」);'只要你的過濾器始終是文件名的開頭(例如「1」,「2」) –

+0

, doxick?因爲它沒有工作,它仍然檢索所有圖像 – mikeb

3
在php

我剛剛在DirectoryIterator

+0

我應該在哪裏放置它? – mikeb

+0

剛剛''文件名= $文件 - > getFilename();'應該沒事 –

+0

@mikeb請注意,如果稍微改變了,應該是'!==' –

4

檢查

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

是不是解決這個不只是在服務器端進行過濾?

爲了使功能更加靈活一些(而不是過濾只是「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 

希望這是你」重新尋找。

+0

我要去使用幻燈片在我的菜單中的所有元素,所以結果需要不同..如果我點擊我的菜單的第一個元素,以1開頭的圖像被提取那裏,第二個元素圖像2等...你的功能呢? – mikeb

+0

是的,它這樣做。只需修復代碼。在模式檢查條件中犯了一個錯字。 – DoXicK

+0

親愛的,它爲我的菜單的第一個元素,但是,如果我嘗試它的第二個元素,並把get_slide_images('圖像',10,'/^2 /');它提取所有元素。但是,如果我將2更改爲1,它的作用 – mikeb

4

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