0

我在这里得到了很好的支持,所以我想我会再试一次,因为我什至不知道从哪里开始寻找这个答案。

我有一个简单的 MySQL 数据库,名为“testimonials”,其中包含 3 个表,“id”、“name”、“content”

我想做的是在固定大小的块内显示推荐。只是简单地显示内容根本没有问题,但是我卡住的地方是我试图让它工作的(有点)独特的方式。我想在每个页面加载时显示一个随机项目,然后检查推荐中“内容”的字符长度,如果它等于或大于 XX 长度,则只显示一个推荐,否则如果是长度小于 XX 以显示第二个推荐(假设它与第一个组合不会破坏容器盒)。

有问题的框是 362px 宽和 353px 高,使用 Verdana 的 14px 字体。推荐将如何出现在页面上的示例如下:

“这是推荐内容,来自客户的一些好消息。”
-- Billy Bob, Crazy Joe's Tavern 的老板

数据库中的“名称”表以粗体显示所有内容(当然,减去--),以防有人觉得需要询问。

当我打字时,我感觉好像我在寻求奇迹,但是我仍然会发布这个问题,希望有人可能知道答案。一如既往,感谢我可能得到的任何帮助,如果这只是要求太多,我并不完全反对一次只显示一个推荐的想法,制定基本规则说它们必须包含至少 XX 个字符.

谢谢!

快速更新:我没想到会这么快得到答案,我现在不在办公桌前,所以我一坐下就去看看哪个答案最合适。但是,你们是否聚在一起并尝试使您的答案比以前的答案更复杂?大声笑,不过,感谢任何提供帮助的人,你们摇滚!

最终编辑:我决定反对这整个想法,因为它只是让一切变得复杂。目前,我只是要显示所有推荐,并让它们滚动,同时我正在处理一个 jQuery 片段以使其更漂亮。不过感谢大家的帮助!如果我再次决定这样做,我将尝试我选择的答案。

4

3 回答 3

0

你只需要一个循环。伪代码:

$length = 0;
$target = 200; // or whatever
while( $length < $target ) {
    $comment = getOneComment();
    displayComment($comment);
    $length += strlen( $comment['content'] ); // assuming getOneComment() returns an associative array
}

为了让它更漂亮,如果显示框的高度是固定的,你可以使用一些 jQuery 来切换是否显示第二条评论。

于 2013-10-28T21:46:02.997 回答
0

像这样的东西是你需要的。

<?php
$str = $res["testimonial"];
if (strlen($str) > 50) {
    // Logic to retrieve and display second testimonial
}
?>

显然,您需要进行更多处理以确定第二个推荐是否足够短以适应或不适合。但这应该让你开始。

编辑:对于随机化,我在自己的网站上使用它:

$referrals = mysql_query("SELECT id FROM ts_testimonials");
$referralView = array();
$i = 0;
while ($newReferral = mysql_fetch_array($referrals)) {
  $referralView[$i] = $newReferral['id'];
  $i++;
}
if (sizeof($referralView) >= 1){
  $referralTop = rand(0,sizeof($referralView)-1);
  $newReferralTop = mysql_fetch_array(mysql_query("SELECT * FROM ts_testimonials WHERE id = '".$referralView[$referralTop]."'"));
  if (sizeof($referralView) >=2){
    $referralBottom = rand(0,sizeof($referralView)-1);
    while ($referralBottom == $referralTop) {
      $referralBottom = rand(0,sizeof($referralView)-1);
    }
    $newReferralBottom = mysql_fetch_array(mysql_query("SELECT * FROM ts_testimonials WHERE id = '".$referralView[$referralBottom]."'"));
  }
}
于 2013-10-28T21:48:39.450 回答
0

假设您在数组中有推荐:

$testimonials = array(
     't1' => array(
         'content' => 'testimonials 1 content..',
         'author' => 'the author'
     ),
     't2' => array(
         'content' => 'testimonials 2 content..',
         'author' => 'the author 2'
     ),
);

你可以有一个maxLengthTestimonialsContentmaxLenthAllTestimonnials变量:

$maxLengthTestimonialsContent = 120;
$maxLenthAllTestimonnials = 240;

现在通过一个简单的循环,您可以构建用于显示的数组推荐:

$testimonialsToShow = array();

$i = 1; $totalLength = 0
foreach($testimonials as $t) {
    if( $i > 1 && strlen( $t['content']) < $maxLengthTestimonialsContent
        &&  $totalLength < $maxLenthAllTestimonnials  )
        break; // basically here you test that testimonials less first
               // and with less length than maxLengthTestimonial, and also
               // total length less than maxLengthAll to be stored 
               //in $testimonialsToShow

    else {
        $testimonialsToShow[] = $t;
        $totalLength = $t['content'];
    }

}
于 2013-10-28T21:52:38.043 回答