将图像放入foreach循环中的行

时间:2014-11-15 19:39:33

标签: php html css

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

这是存储文件名的$ 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中获取图像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个图像,这个代码就是这样,但是我怎样才能将每个图像网址都输入到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');
}

2 个答案:

答案 0 :(得分:4)

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

    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指的是包含图片的数组。

注意:在第二个片段中,我明确地包含了用于运算符优先级的圆括号。

Note2 :我鼓励您使用代码并查看是否可以进行任何改进,将我的代码段视为起点,而不是最终解决方案。

答案 1 :(得分:0)

由于您已经在$this->images中拥有了一个对象,因此您应该可以将图片网址设为:

$this->images->filename;

还要考虑到你迭代$ammountofrows并获得每个filename属性,你应该通过$this->images迭代或直接访问给定数组上的每个位置,例如:

$this->images[0]->filename; // will return 1416073696I0QHU.jpg