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

标签 php html css

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

这里是 $this->images 的 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 中获取图像 url,这是创建结构的代码的样子

    $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 张图像,这段代码就是这样做的,但是我如何才能将每个图像 url 放入 div,所以第一个“文件名”数组转储之外将代替此处的 1

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

and then carry on when the next row is created

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

型号

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

Controller

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:我鼓励您尝试使用代码,看看是否可以做出任何改进,将我的代码片段视为起点,而不是最终解决方案。

关于php - 将图像放入 foreach 循环中的行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26949888/

相关文章:

php - atom.io Laravel 自动预测问题

html - 如何设置div的最小高度以适合屏幕?

JavaFX 包组件

php - 自定义电话验证器不工作 symfony

PHP fork,并从 child 那里得到结果

jquery - 简单的代码适用于 Pen,但不适用于我的编辑器

具有 HTML5 boolean 属性的 Java Spring 表单字段

jquery - 使用 :after 使用 jquery 更改样式

html - 不要在背景图像的 div 中显示文本

php - mysqli_query 字符串较短