我正在尝试实现类似于facebook的小部件,例如:
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 = "♥ 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
应该在它之后,但我把它放在开头。有帮助吗?我只需要逻辑,而不是实际的代码。
答案 0 :(得分:3)
您可以尝试这样的事情:
$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';
答案 1 :(得分:1)
爱德华,
您可以通过将$key++;
置于循环顶部并取出循环中$key + 1
的所有位置来解决此问题。
我认为正在发生的事情是$key + 1
假设有当前用户。
如果当前用户不在第一个$ limit限制条目数
中,则该行也不会显示该行if($key + 1 > $limit)
break;
您可以通过将其放在查找当前用户的代码之后来解决此问题。
在Java中(我知道,但它运行的是它),它看起来像:
List<String> users = Arrays.asList("Brian","Tom","Jack","John");
int key = 0;
String html = "";
String currentUser = "Brian";
int limit = 3;
boolean foundCurrentUser = false;
for (String user : users) {
key ++;
if (currentUser == user) {
foundCurrentUser = true;
continue;
}
if (key > limit) {
continue;
}
html += user;
if (key < users.size() - 1) {
html += ",";
} else if (key == users.size() - 1 && key != limit) {
html += " and ";
}
}
if (foundCurrentUser) {
String userHTML = "You";
if (key > 2) {
userHTML += ", ";
} else if (key == 1) {
userHTML += " and ";
}
html = userHTML + html;
}
html = "Likeed by " + html;
if (users.size() > limit ) {
html += " and 3 other people";
}
System.out.println(html);