Самый эффективный способ разграничить ключ

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

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

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
0
0
182
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Ответ принят как подходящий

Используйте str_split ():

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

Выход:

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

Затем, конечно, чтобы вставить дефис между наборами, вы просто взорваться () их вместе:

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

Предполагая, что OP хочет вставить дефис, вы, вероятно, захотите выполнить implode ('-', $ sets).

Rob 20.11.2008 08:29

Да, отредактировал это, пока вы комментировали. Сначала я предположил, что он знает функцию implode ().

Jeremy Ruten 20.11.2008 08:31

Я знаю, я тоже знаю, как это сделать, я был: а) надеялся на что-то другое, о чем я еще не знал, б) предлагал это другим людям, так как меня спрашивали об этом сегодня 3 раза.

UnkwnTech 20.11.2008 08:37

Какой источник данных? Если это БД, вы можете сделать так, чтобы БД отформатировала ее для вас еще до того, как она дойдет до PHP.

DreamWerx 20.11.2008 12:52

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

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

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

Я не уверен, что это сработает лучше? preg_replace ('/ (\ d {4}) /', '- \ 1', '0123456789012345');

Loki 23.11.2008 07:02

Это не сработает, так как вы останетесь с "-", висящим перед выходом. Это также убивает часть гибкости. Однако я отредактировал свое сообщение, чтобы использовать синтаксис {4}.

strager 23.11.2008 11:13

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

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

?>

Другие вопросы по теме