【问题标题】:Most efficient way to delimit key分隔键的最有效方法
【发布时间】:2008-11-20 05:16:28
【问题描述】:

假设我有一个由 16 个数字字符组成的字符串(即 0123456789012345),在 PHP 中将其划分为多个集合的最有效方法是:0123-4567-8901-2345?

注意:我正在重写一个非常缓慢的现有系统。

【问题讨论】:

    标签: php string


    【解决方案1】:

    使用str_split():

    $string = '0123456789012345';
    $sets = str_split($string, 4);
    print_r($sets);
    

    输出:

    Array
    (
        [0] => 0123
        [1] => 4567
        [2] => 8901
        [3] => 2345
    )
    

    然后当然要在集合之间插入连字符,您只需 implode() 将它们放在一起:

    echo implode('-', $sets); // echoes '0123-4567-8901-2345'
    

    【讨论】:

    • 假设 OP 想要插入连字符,那么你可能想要做 implode('-', $sets)。
    • 是的,在您发表评论时编辑了它。一开始我以为他知道 implode() 函数。
    • 我知道,我也知道该怎么做,我是 A)希望有一些我不知道的不同的东西,b)把它放在那里给其他人,因为我一直今天问了 3 次这个问题。
    • 数据源是什么?如果它是一个数据库,你可以在它进入 PHP 之前为你格式化它。
    【解决方案2】:

    如果您正在寻找更灵活的方法(例如电话号码),请尝试正则表达式:

    preg_replace('/^(\d{4})(\d{4})(\d{4})(\d{4})$/', '\1-\2-\3-\4', '0123456789012345');
    

    如果您看不到,第一个参数接受四组,每组四位数。第二个参数格式化它们,第三个参数是你的输入。

    【讨论】:

    • 我不确定这会不会更好? preg_replace('/(\d{4})/', '-\1', '0123456789012345');
    • 那行不通,因为你会在输出前面挂一个“-”。它还扼杀了一些灵活性。不过,我已将帖子编辑为使用 {4} 语法。
    【解决方案3】:

    这有点笼统:

    <?php
    
    // arr[string] = strChunk(string, length [, length [...]] );
    function strChunk() {
        $n = func_num_args();
        $str = func_get_arg(0);
        $ret = array();
    
        if ($n >= 2) {
            for($i=1, $offs=0; $i<$n; ++$i) {
                $chars = abs( func_get_arg($i) );
                $ret[] = substr($str, $offs, $chars);
                $offs += $chars;
            }
        }
    
        return $ret;
    }
    
    echo join('-', strChunk('0123456789012345', 4, 4, 4, 4) );
    
    ?>
    

    【讨论】:

      猜你喜欢
      • 2012-04-12
      • 1970-01-01
      • 2023-03-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-01-31
      • 2014-09-30
      • 1970-01-01
      相关资源
      最近更新 更多