这是我确信有一个简单的解决方案的情况之一,我需要帮助才能实现。
假设我们正在处理三个电话号码: home(h), office(o)和 mobile(m)。我们需要避免向最终用户显示重复的电话号码。
为了更好地解释,这里有三个示例案例(在PHP中):
案例1:
$phone = array(
'h' => '212-555-1212',
'o' => '212-555-1212',
'm' => '212-555-1212'
);
应该屈服:
212-555-1212 (h,o,m)
案例2:
$phone = array(
'h' => '212-555-1212',
'o' => '212-555-1234', // different
'm' => '212-555-1212'
);
应该屈服:
212-555-1212 (h,m)
212-555-1234 (o)
案例3:
$phone = array(
'h' => null,
'o' => '212-555-1234',
'm' => '212-555-1212'
);
应该屈服:
212-555-1234 (o)
212-555-1212 (m)
我已经尝试通过检查每个场景来使用各种case
语句,但由于某些值可能为空,这很复杂。
我也曾尝试使用过于复杂的if/elseif/else
条件,但同样,它极不优雅。
我尽最大努力是使用array_filter
从数组中删除空元素并使用array_unique
删除重复项,但后来我丢失了H / O / M键:
$phone = array_filter(array_unique($phone));
我该如何处理?
答案 0 :(得分:3)
我会先翻转阵列。创建一个以电话号码为密钥的新阵列。像这样:
$numbers = [];
foreach($phone AS $type => $number) {
$numbers[$number][] = $type;
}
现在你有一个$numbers
数组,包含唯一的手机,每个手机都有一系列类型。
要显示输出,请:
foreach($numbers AS $number => $types) {
echo $number . " (" . implode(",",$types) . ")";
}
我把它作为一个真正的快速功能包装起来,然后运行你的所有三个案例。您可以在此处查看代码和输出: