0

我需要从 mysql 查询输出的每两个结果输出一条推文。有问题的页面是为了更好地解释我想要实现的目标。

这是我到目前为止使用的代码,它不起作用......

 foreach($multi_array as $key => $value ){

// start tweet output for loop. twitter authentication is before this foreach loop

 ?>
<div id="masonry-container">
<?php 

$dbleads = new mysqli('localhost','****','*****','******'); 

$query = mysqli_query($dbleads, "SELECT * FROM plugin_blog ORDER BY date_added DESC LIMIT 0,10");
$i = 0;
$j = 0;
while ($row=mysqli_fetch_array($query)){
    preg_match('/(<img[^>]+>)/i', $row['html'], $matches);
    $img = $matches[1];
    ++$i;
    ++$j;
    if ($i%2 == 0){
            if($j%10==0){
             echo "<div class='masonryImage tweets' style='width:300px; height:175px;'><div class='tweet-content'>" . $value['text'] . "</div></div>";
            }
    }
    else{
        echo "<div class='masonryImage blogImage' style='width: 300px; height:250px;'>" . $img . " </div>";
    }
  }
}

有什么想法我哪里出错了吗?

更新:现在设法将推文放在正确的位置,但是,只显示一条推文,它与该推文的前五个字母相呼应,这是我使用的代码:

foreach($multi_array as $key => $value ){
// printing each tweet wrapped in a <li> tag
$tweets = $value['text'];
}

$dbleads = new mysqli('********','***********','**********','************'); 

$query = mysqli_query($dbleads, "SELECT * FROM plugin_blog WHERE published = 1 ORDER BY date_added DESC LIMIT 0,10");
$i = 0;
$j=-1;
while ($row=mysqli_fetch_array($query)){
    preg_match('/(<img[^>]+>)/i', $row['html'], $matches);
    $img = $matches[1];
    ++$i;
    if ($i%2 == 0){
        ++$j;
        echo "<div class='masonryImage tweets' style='width:300px; height:175px;'><div class='tweet-content'>" . $tweets[$j] . "</div></div>";
        echo $j; // here only for debugging, checking the counter works
    }
    else{
        echo "<div class='masonryImage blogImage' style='width: 300px; height:200px;'>" . $img . " </div>";
    }
}
4

3 回答 3

2

你需要改变

$tweets = $value['text'];

$tweets[] = $value['text'];

创建数组 $tweets; 否则,当使用 $tweets[$i] 时,您只会在索引 $i 处获得该单个字母

于 2013-10-14T14:29:25.663 回答
0

如果您有以下结果:

while ($row=mysqli_fetch_array($query)){
var_dump($row);

那么你失败了

if ($i%2 == 0) {

            if($j%10==0){

你的查询限制是 10 你每 2 进入一次,然后每 10 次我猜你永远不会进入第二个。检查你是否先进入if ($i%2 ==0) {echo 'i am in';}

于 2013-10-04T12:09:04.570 回答
0

如果我理解正确,而不是您当前每 9 张图片 1 条推文,您想要每 1 张图片 1 条推文?我不明白为什么你在你的循环中都有,所以$i已经给了你“其他”的概念,我只是删除了所有提到的:-)$j$i$j

foreach($multi_array as $key => $value ){

// start tweet output for loop. twitter authentication is before this foreach loop

 ?>
<div id="masonry-container">
<?php 

$dbleads = new mysqli('localhost','****','*****','******'); 

$query = mysqli_query($dbleads, "SELECT * FROM plugin_blog ORDER BY date_added DESC LIMIT 0,10");
$i = 0;
while ($row=mysqli_fetch_array($query)){
    preg_match('/(<img[^>]+>)/i', $row['html'], $matches);
    $img = $matches[1];
    ++$i;
    if ($i%2 == 0){
        echo "<div class='masonryImage tweets' style='width:300px; height:175px;'><div class='tweet-content'>" . $value['text'] . "</div></div>";
    }
    else{
        echo "<div class='masonryImage blogImage' style='width: 300px; height:250px;'>" . $img . " </div>";
    }
  }
}
于 2013-10-14T12:05:02.150 回答