【发布时间】:2012-10-03 08:35:38
【问题描述】:
可能重复:
Implode array with “, ” and add “and ” before last item
我正在自定义一个 WordPress 主题,并且我在管理员的用户个人资料页面中创建了一些复选框,确切地说是 3 个。当用户选中每个框时,该框的值会保存在一个名为 $goals 的数组中,当他们保存他们的个人资料时。这一切都很好。
在模板页面上,我正在对如何根据用户选择的目标显示某些内容进行一些测试,因此我创建了以下代码来检查数组是否包含它自己的每个值,然后是目标的组合一起,然后根据这些选择回显特定内容。它工作得很好,但我觉得代码臃肿并且可以简化。这是我一直希望用我的代码做的事情。我非常感谢您对如何用更少的代码实现相同结果的想法。谢谢。
$goals = get_user_meta( $userID, 'goals', $single );
if (in_array('Weight Loss', $goals, true) && !in_array('Improve Fitness', $goals, true) && !in_array('Improve Health', $goals, true)) {
echo 'Weight Loss';
} elseif (in_array('Improve Fitness', $goals, true) && !in_array('Weight Loss', $goals, true) && !in_array('Improve Health', $goals, true)) {
echo 'Improve Fitness';
} elseif (in_array('Improve Health', $goals, true) && !in_array('Improve Fitness', $goals, true) && !in_array('Weight Loss', $goals, true)) {
echo 'Improve Health';
} elseif (in_array('Weight Loss', $goals, true) && in_array('Improve Fitness', $goals, true) && !in_array('Improve Health', $goals, true)) {
echo 'Weight Loss and Improve Fitness';
} elseif (in_array('Weight Loss', $goals, true) && !in_array('Improve Fitness', $goals, true) && in_array('Improve Health', $goals, true)) {
echo 'Weight Loss and Improve Health';
} elseif (!in_array('Weight Loss', $goals, true) && in_array('Improve Fitness', $goals, true) && in_array('Improve Health', $goals, true)) {
echo 'Improve Fitness and Improve Health';
} elseif (in_array('Weight Loss', $goals, true) && in_array('Improve Fitness', $goals, true) && in_array('Improve Health', $goals, true)) {
echo 'Weight Loss, Improve Fitness and Improve Health';
} else {
echo 'Nothing set';
}
【问题讨论】:
-
@deceze 但这并不直接处理空数组;即它不会在具有空字符串的数组和空数组之间消除歧义。
-
然后
array_filter您的数组之前或以其他方式确保其中没有空字符串,然后为空数组创建一种特殊情况。