ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

用逗号和字符串PHP分隔数组

2019-07-31 04:33:45  阅读:291  来源: 互联网

标签:implode php arrays


我想用逗号和单词分隔数组.

这是我的代码:

$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

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有