【问题标题】:How to display images(.jpg) only?如何仅显示图像(.jpg)?
【发布时间】:2019-05-27 20:03:13
【问题描述】:

数组([0] => assets/image/man.jpg [1] => assets/image/violin.jpg [2] => assets/image/test.txt)

数据库中的数据如上。它包含图像和txt。我如何只显示图像。

【问题讨论】:

  • 您可以更新您的查询,以便只返回图像文件

标签: php codeigniter


【解决方案1】:
$ar = ['assets/image/man.jpg','assets/image/violin.jpg','assets/image/test.txt'];
 $allowed = ['jpg']; //your image extensions
 $img_ar = [];
 foreach($ar as $img){
     $ext = pathinfo($img,PATHINFO_EXTENSION);
     if(in_array($ext,$allowed)){
         $img_ar[] = $img;
     }

 }
 print_r($img_ar);

【讨论】:

    【解决方案2】:
    $array= Array ( [0] => assets/image/man.jpg [1] => assets/image/violin.jpg [2] => assets/image/test.txt )
    $m_array = preg_grep('/^.jpg\s.*/', $array);
    

    $m_array 包含匹配的数组元素。

    更多细节请看这个帖子search a php array for partial string match

    【讨论】:

      【解决方案3】:

      为此,您可以在查询时直接过滤它

      field like '%.jpg'
      

      如果您不想这样做并操作数组,您可以使用 array_filter 之类的,

      $array= Array ('assets/image/man.jpg', 'assets/image/violin.jpg', 'assets/image/test.txt');
      
      $output = array_filter($array, function($arr) {
              if (strpos($arr, '.jpg') == true){
                      return $arr;
              }
      });
      

      $output 数组仅包含具有 .jpg 字符串的条目。

      这里使用strpos 来检查.jpg 是否存在。

      您可以使用substr($str, -4) == '.jpg' 检查最后 4 个字符。

      【讨论】:

        【解决方案4】:

        如果您使用的是 PHP 5+(我希望您使用的是 7.0+),请使用SplFileInfo() class

        $spl  = new SplFileInfo($fileName); 
        if ($spl->getExtension() == 'jpg') {
        //image
        }
        

        【讨论】:

          【解决方案5】:

          使用foreach循环并获取文件的扩展名并显示。

          foreach($array_result as $result){
          
              //$array_result is array data
              //condition is checking the file that if it is an image or not
              $allowed =  array('gif','png' ,'jpg');
              $filename = $result;
              $ext = pathinfo($filename, PATHINFO_EXTENSION);
              if(in_array($ext, $allowed) ) {
                  echo '<img src="'.$result.'" alt="" /> ';
              }
           }
          

          【讨论】:

          • 例如,这将在fakefile-jpg.txt 上失败。
          • fakefile-jpg.txt 将是文本文件而不是图像
          • 是的,您的 if 语句会将其误认为是图像。您需要以正确的方式在循环中获取正确的文件扩展名
          • 您在检查文本中是否存在 jpg 这个词时犯了一个错误。
          • @Akintunde-Rotimi 我已更改我的答案
          【解决方案6】:

          这应该可以解决问题:

          $images = array();
          $images_exts = array('.jpg','.png');
          foreach($db_array as $key => $value)
          { 
              foreach($images_exts as $ext)
              {
                  if (strpos($value,$ext))
                  {
                      $images[] = $value;
                  }
              }
          }
          

          这是一个例子https://3v4l.org/8W3Be


          这是另一种方式,无论你最喜欢什么:

          $images = array();
          $images_exts = array('jpg','png');
          foreach($input as $value)
          {
              if(in_array(@end(explode('.', $value)), $images_exts))
              {
                  $images[] = $value;
              }
          }
          

          这是一个例子https://3v4l.org/b0njd

          【讨论】:

          • 例如,这将在 fakefile-jpg.txt 上失败。您应该以正确的方式检查扩展名。您所做的只是检查文本,jpg 而不是扩展名
          • @Akintunde-Rotimi 这个怎么样?
          • 添加了另一种不会在-jpg 甚至.jpg 上失败的方式,如果它是文件名本身的一部分:D @Akintunde-Rotimi
          【解决方案7】:

          为什么要在页面上写时检查它?
          您可以:
          1. 用 '/' 分割 assets/image/man.jpg
          2. 得到最后一个,
          3. 用'.'分割最后一个
          4. 获取扩展名,如果是“jpg”,则将其写入页面。

          【讨论】:

            【解决方案8】:

            <?php
              $error = array();
              $file_extArr = explode(".", $file_name);
              $file_extEnd = end($file_extArr);
              $file_ext = strtolower($file_extEnd);
            
              $validateImage = array("png", "jpg", "jpeg", "gif");
            
              if (!in_array($file_ext, $validateImage)) {
                $error[] = "wrong format image";
              }
            
              if (!empty($error)) {
               return;
              }
            ?>

            【讨论】:

              【解决方案9】:
                  <?php 
                  $data = Array ( 
                     'assets/image/man.jpg ',
                     'assets/image/violin.jpg ',
                     'assets/image/test.txt ',
                  );
              
                  $arrDara = array();
                  foreach ($data as $value) {
                      $fileName = explode('/', $value);
                      $arrDara[] = end($fileName);
                  }
              
                  print_r($arrDara);
              ?>
              

              只需循环您的阵列并爆炸每个刺痛。最后一个索引就是你所需要的。

              【讨论】:

                猜你喜欢
                • 2023-03-15
                • 2023-03-19
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 2021-06-28
                • 2010-11-24
                • 2010-11-17
                相关资源
                最近更新 更多