我正在构建一个包含用户和用户配置文件的网站。配置文件中的许多字段都是可选的。
有很多用户生成内容的机会,因此我需要在网站的许多不同位置(评论、帖子等)显示此内容的作者。在用户的个人资料中,他能够(可选地)填写他的“名字”、“姓氏”和“显示名称”。
为了显示作者,我编写了一个辅助方法来查看提供的这些字段的数组,并按照以下优先顺序返回最适合用户的名称:
- 如果用户填写了
display_name
,就会显示出来。 - 如果用户填写了
first_name
和last_name
,但没有填写display_name
,它将显示这两个名字 - 如果用户只填写了
first_name
,它会显示first_name
。 - 如果用户只填写了
last_name
,则显示last_name
。 - 如果所有其他方法均失败,将显示用户 ID,即
user123
- 如果没有任何数组键,或者参数为 NULL,名称将显示为
NULL
这个方法很有效,但是很丑。必须有一种方法可以通过替代嵌套 if/else 语句来美化这一点。
public function nameify($names = NULL) {
$name = '';
if (!empty($names)) {
if (!empty($names['display_name'])) {
$name = $names['display_name'];
} elseif (!empty($names['first_name'])) {
$name = $names['first_name'];
if (!empty($names['last_name'])) {
$name .= ' ' . $names['last_name'];
}
} elseif (!empty($names['last_name'])) {
$name = $names['last_name'];
}
if (empty($name) && !empty($names['id'])) {
$name = 'user' . $names['id'];
} else {
$name = 'NULL';
}
} else {
$name = 'NULL';
}
return $name;
}
最佳答案
public function nameify($names = NULL) {
if ($names) {
if (!empty($names['display_name'])) {
return $names['display_name'];
}
if (!empty($names['first_name'])) {
$name = $names['first_name'];
}
if (!empty($names['last_name'])) {
$name .= ' ' . $names['last_name'];
}
if (empty($name) && !empty($names['id'])) {
$name = 'user' . $names['id'];
}
}
return $name ? ltrim($name) : 'NULL';
}
首先设置默认值,如果没有其他匹配则返回它。然后,因为我们总是希望返回显示名称(如果有的话)。
编辑:调整以防止返回“NULL”
关于php - 这些嵌套的 if/elseif 语句的更优雅的解决方案是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3814554/