我有一组以这种格式返回的图像文件名。
这是存储文件名的$ 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');
}
答案 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