Самый эффективный способ определения ключа - PullRequest
0 голосов
/ 20 ноября 2008

Скажем, у меня есть строка из 16 числовых символов (т. Е. 0123456789012345), какой самый эффективный способ разграничить ее на наборы, такие как: 0123-4567-8901-2345, в PHP?

Примечание: я переписываю существующую систему, которая мучительно медленная.

Ответы [ 3 ]

6 голосов
/ 20 ноября 2008

Использование 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'
0 голосов
/ 23 ноября 2008

Это немного более общее:

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

?>
0 голосов
/ 23 ноября 2008

Если вы ищете более гибкий подход (например, для телефонных номеров), попробуйте регулярные выражения:

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

Если вы не видите, первый аргумент принимает четыре группы по четыре цифры в каждой. Второй аргумент форматирует их, а третий аргумент - ваш ввод.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...