Php 最有效的密钥分隔方法

Php 最有效的密钥分隔方法,php,string,Php,String,假设我有一个由16个数字字符组成的字符串(即0123456789012345),在PHP中,将其划分为0123-4567-8901-2345这样的集合最有效的方法是什么 注意:我正在重写一个速度非常慢的现有系统。使用: 输出: Array ( [0] => 0123 [1] => 4567 [2] => 8901 [3] => 2345 ) 当然,要在集合之间插入连字符,只需将它们放在一起: echo implode('-', $sets

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

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

使用:

输出:

Array
(
    [0] => 0123
    [1] => 4567
    [2] => 8901
    [3] => 2345
)
当然,要在集合之间插入连字符,只需将它们放在一起:

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

输出:

Array
(
    [0] => 0123
    [1] => 4567
    [2] => 8901
    [3] => 2345
)
当然,要在集合之间插入连字符,只需将它们放在一起:

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

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

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

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

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

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

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

这更一般一些:

<?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) );

?>

这是一个更一般的问题:

<?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) );

?>


假设OP希望插入连字符,那么您可能需要执行内爆(“-”,$set)。是的,在您发表评论时在中编辑了它。一开始我以为他知道内爆()函数。我知道,我也知道怎么做,我是A)希望得到一些我还不知道的东西,b)为其他人发布,因为我今天已经被问了3次。数据来源是什么?如果它是一个DB,你可以在它进入PHP之前让DB为你格式化它。假设OP想要插入连字符,你可能会想做内爆(“-”,$set)。是的,在你评论的时候编辑了它。一开始我以为他知道内爆()函数。我知道,我也知道怎么做,我是A)希望得到一些我还不知道的东西,b)为其他人发布,因为我今天已经被问了3次。数据来源是什么?如果它是一个DB,你可以在它进入PHP之前让DB为你格式化它。我不确定这是否会更好?preg_replace(“/(\d{4})/”、“-\1”、“0123456789012345”);这是行不通的,因为在输出的前面会挂一个“-”。它还扼杀了一些灵活性。不过,我已经编辑了我的帖子,使用了{4}语法。我不确定这是否会更好?preg_replace(“/(\d{4})/”、“-\1”、“0123456789012345”);这是行不通的,因为在输出的前面会挂一个“-”。它还扼杀了一些灵活性。不过,我已经编辑了我的帖子,使用了{4}语法。