用逗号和字符串PHP分隔数组
作者:互联网
我想用逗号和单词分隔数组.
这是我的代码:
$array = array( 'user1', 'user2', 'user3', 'user4', 'user5' );
$last = array_pop( $array );
$string = count( $array ) ? implode( ", ", $array ) . " and " . $last : $last;
printf( 'Authors: %s', $string );
我的代码打印出来:
作者:user1,user2,user3,user4和user5
我成功地创建了一个代码,用逗号来破坏数组并搜索最后一个密钥并用一个单词’和’分隔它.
但这就是我想要的,但经过两天多的工作后,我失败了:
作者:user1,user2和user3以及其他2个人.
解决方法:
虽然我一直在寻找处理这样的任务的聪明的计算过程,但我会提供更多的行人选择. (为了记录,我讨厌写一些if-elseif-else条件,几乎和我讨厌switch-case块的冗长一样多.)对于这个狭窄的任务,我选择放弃我喜欢的数组函数并有条件地打印这些值与他们的自定义分隔符.
虽然此解决方案可能在页面上的可扩展性最低,但它可能是最容易理解的(将代码与其生成的输出相关联).如果这是关于“喜欢”或其他什么,我真的没有看到对可扩展性的大量需求 – 但我可能是错的.
密切关注2计数案例.我的解决方案用和代替,而不是,这似乎更适合英语/人类.
代码:(Demo)
$arrays[] = array();
$arrays[] = array('user1');
$arrays[] = array('user1', 'user2');
$arrays[] = array('user1', 'user2', 'user3');
$arrays[] = array('user1', 'user2', 'user3', 'user4');
$arrays[] = array('user1', 'user2', 'user3', 'user4', 'user5');
foreach ($arrays as $i => $array) {
echo "TEST $i: ";
if (!$count = sizeof($array)) {
echo "nobody";
} elseif ($count == 1) {
echo $array[0];
} elseif ($count == 2) {
echo "{$array[0]} and {$array[1]}";
} elseif ($count == 3) {
echo "{$array[0]}, {$array[1]}, and {$array[2]}";
} else {
echo "{$array[0]}, {$array[1]}, {$array[2]}, and " , $count - 3, " other" , ($count != 4 ? 's' : '');
}
echo "\n---\n";
}
输出:
TEST 0: nobody
---
TEST 1: user1
---
TEST 2: user1 and user2
---
TEST 3: user1, user2, and user3
---
TEST 4: user1, user2, user3, and 1 other
---
TEST 5: user1, user2, user3, and 2 others
---
附:相同处理的更紧凑版本:
代码:(Demo)
if (!$count = sizeof($array)) {
echo "nobody";
} elseif ($count < 3) {
echo implode(' and ', $array);
} else{
echo "{$array[0]}, {$array[1]}";
if ($count == 3) {
echo ", and {$array[2]}";
} else {
echo ", {$array[2]}, and " , $count - 3, " other" , ($count != 4 ? 's' : '');
}
}
最后,这是一种“医生”阵列和前置以及最终元素的方法.我想无论如何你转动这个任务,会有一定程度的卷积.
代码:(Demo)
$count = sizeof($array);
if ($count < 3) {
echo implode(' and ', $array);
} else {
if ($count == 3) {
$array[2] = "and {$array[2]}";
} else {
$more = $count - 3;
array_splice($array, 3, $more, ["and $more other" . ($more > 1 ? 's' : '')]);
}
echo implode(', ', $array);
}
标签:implode,php,arrays 来源: https://codeday.me/bug/20190731/1586626.html