PHP-将图像放入foreach循环中的行

我有一组以这种格式返回的图像文件名.

这是$this->图片的var_dump(),用于存储文件

 array (size=9)
0 => 
object(stdClass)[8]
  public 'filename' => string '1416073696I0QHU.jpg' (length=19)
  public 'primary' => string '1' (length=1)
1 => 
object(stdClass)[9]
  public 'filename' => string '1416073696cTU23.jpg' (length=19)
  public 'primary' => string '0' (length=1)
2 => 
object(stdClass)[10]
  public 'filename' => string '1416073696uxsvq.jpg' (length=19)
  public 'primary' => string '0' (length=1)
3 => 
object(stdClass)[11]
  public 'filename' => string '1416073696uBYgo.jpg' (length=19)
  public 'primary' => string '0' (length=1)
4 => 
object(stdClass)[12]
  public 'filename' => string '1416073696vLBiH.jpg' (length=19)
  public 'primary' => string '0' (length=1)
5 => 
object(stdClass)[13]
  public 'filename' => string '1416073696rOiFe.jpg' (length=19)
  public 'primary' => string '0' (length=1)

我目前有用于创建所需行的代码,但我不确定如何获取已创建的div内的图像网址,这是用于创建结构的代码的样子

    $images = $this->images;
    $imagesPerLine = 4;
    $arraycount = count($images);
    $ammountofrows = ceil($arraycount / $imagesPerLine);

    for ($i = 0; $i < $ammountofrows; $i++) {
        echo"<div class='row'>
    <div class='col-md-3'>1</div>        
    <div class='col-md-3'>2</div>        
    <div class='col-md-3'>3</div>        
    <div class='col-md-3'>4</div>        
         </div>";
    }

在此示例中,我们将需要两行,因为每行有4张图片,而我们有5张图片,此代码可以做到这一点,但是我如何才能将每个图片网址都放入div,因此第一个文件名”从数组转储将代替此处的1

    <div class='col-md-3'>1</div>        

and then carry on when the next row is created

这是用于生成输出代码,因为我使用的是MVC系统,这里是所使用的模型和控制器

模型

    public function Getimage() {
    $sql = "SELECT `filename`, `primary` FROM `user_img` WHERE `user_id` = :user_id";
    $query = $this->db->prepare($sql);
    $query->execute(array(':user_id' => $_SESSION['user_id']));
    $filepath = $query->fetchAll();
    return $filepath;
}

控制者

function imageupload() {
    Auth::handleLogin();
    $profile_model = $this->loadModel('profile');
    $this->view->images = $profile_model->Getimage();
    $this->view->render('profile/imageupload');
}

解决方法:

有几种方法可以解决此问题,使用您的方法,您将需要两个循环,一个循环遍历行(如您所提供),另一个循环遍历图像.如果可以避免,我倾向于远离嵌套循环.

    for ($i=0; $i < $amountOfRows; $i++) {
        echo "<div class='row'>";
        for ($j=$i*4; $j < ($i*4+4); $j++) {
            if (!isset($images[$j])) {
                break;
            }
            echo "<div class='col-md-3'>{$images[$j]->filename}</div>";
        }
        echo "</div>";
    }

在上面的循环中,$images表示图像数组.

一个选择是直接循环遍历图像数组,并使用模块化算法生成画廊.这是一种方法

    foreach ($images as $key=>$image) {
        if (!($key%4)) {
            echo "<div class='row'>";
        }
        echo "<div class='col-md-3'>{$image->filename}</div>";
        if (!(($key+1)%4) || (($key+1) == count($images))) {
            echo "</div>";
        }
    }

再次在上面的代码段中,$images指向包含图像的数组.

注意:在第二个代码段中,我明确包含了运算符优先级的圆括号.

注意2:我鼓励您尝试使用代码,看看是否可以进行任何改进,将我的代码片段作为起点,而不是最终解决方案.

相关文章

统一支付是JSAPI/NATIVE/APP各种支付场景下生成支付订单,返...
统一支付是JSAPI/NATIVE/APP各种支付场景下生成支付订单,返...
前言 之前做了微信登录,所以总结一下微信授权登录并获取用户...
FastAdmin是我第一个接触的后台管理系统框架。FastAdmin是一...
之前公司需要一个内部的通讯软件,就叫我做一个。通讯软件嘛...
统一支付是JSAPI/NATIVE/APP各种支付场景下生成支付订单,返...