我正在尝试实现类似facebook的like widget,它说的是:

You, Name1, Name2 and 20 other people like this

我提取了所有的数据来显示这个html,但是我似乎找不到形成html字符串的正确算法。
我的主要问题是我不知道何时放置and字符串或,(逗号)字符串如果我只需要输入名字,就可以了,但问题是You字符串总是必须是第一个。
我将在这里粘贴我的代码和一些特殊情况下得到的输出(它是php)。
$current_user = 0;
$html = "";
$count = count($result);
$key = 0;
foreach($result as $liked){
    if($key + 1 > $limit)
        break;

    if($liked->uid == $user->uid){
        $current_user = 1;
        continue;
    }

    $html .= "<a href='".$liked->href."'>".$liked->name."</a>";

    if($key < $count - 2)
        $html .= ", ";
    elseif($key == $count - 2 && $key + 1 != $limit)
        $html .= " and ";

    $key++;
}

if($current_user){
    $userHtml = "You";

    if($count > 2)
        $userHtml .= ", ";
    elseif($count > 1)
        $userHtml .= " and ";

    $html = $userHtml.$html;
}

$html = "&hearts; by ".$html;

if($count > $limit){
    $difference = $count - $limit;
    $html .= " and ".$difference." ".format_plural($difference,"other","others");
}

return $html;

在当前用户是最后一个喜欢这个的特殊情况下,它将显示:
♥ by You, admin, edu2004eu and

注意and这个词后面没有任何内容,因为You应该在后面,但我把它放在开头。有什么帮助吗?我只需要逻辑,而不是实际的代码。

最佳答案

你可以试试这样的方法:

$likedBy = array('admin', 'eduard', 'jeremy', 'someoneelse');

// check if I like it and if so move me to the front
if (in_array($currentUsername, $likedBy)) {
  $me = array_search($currentUsername, $likedBy);
  unset($likedBy[$me]);
  array_unshift($likedBy, 'You');
}

// remove anything after the limit
$extra = array_splice($likedBy, 3);

// the comma list
$html = implode(', ', $likedBy);

// any extras? if so, add them here, if not rewrite the list so
// it's "You, Eduard and admin"
if (!empty($extra)) {
  $html .= ' and '.count($extra);
} else {
  $lastguy = array_splice($likedBy, 1);
  $html = implode(', ', $likedBy).' and '.$lastguy;
}

$html .= ' like this';

关于php - 像FB的“X,Y和Z这样的其他人”这样的功能,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/10722343/

10-12 18:06