Как разбить строку через разделитель несколько раз?

Ссылка скопирована
PHP
1 ответ

Есть хэш сумма файла, например, 392981414524f56f68d9f4a47e7072f2
Можно в одно действие, например с помощью sprintfsscanf, привести строку к такому формату: 39298141-4524-f56f-68d9-f4a47e7072f2

Дополнительно:

$result = preg_replace('~^(.{8})(.{4})(.{4})(.{4})(.*)~', '$1-$2-$3-$4-$5', $str);

$result = preg_replace('~^(.{8})(.{4})(.{4})(.{4})(.*)~', '$1-$2-$3-$4-$5', $str);

Самый простой и лаконичный вариант

$uuid_str = "392981414524f56f68d9f4a47e7072f2";  echo join('-', sscanf($uuid_str, '%8s%4s%4s%4s%12s'));

$uuid_str = "392981414524f56f68d9f4a47e7072f2"; echo join('-', sscanf($uuid_str, '%8s%4s%4s%4s%12s'));

Ещё вариант через substr

$uuid_str = "392981414524f56f68d9f4a47e7072f2";  $uuid_dashed =      substr($uuid_str , 0, 8) . '-' .      substr($uuid_str , 8, 4) . '-' .      substr($uuid_str , 12, 4) . '-' .      substr($uuid_str , 16, 4)  . '-' .      substr($uuid_str, 20) ;  var_dump($uuid_dashed);

$uuid_str = "392981414524f56f68d9f4a47e7072f2"; $uuid_dashed = substr($uuid_str , 0, 8) . '-' . substr($uuid_str , 8, 4) . '-' . substr($uuid_str , 12, 4) . '-' . substr($uuid_str , 16, 4) . '-' . substr($uuid_str, 20) ; var_dump($uuid_dashed);

  • Алексей Евтеев Вам сюда

https://regex101.com/r/lM38To/1

Можно, но это не будет красиво. Символ из строки можно печатать по его порядковому номеру(индексу). Если строка всегда одного паттерна, то записать её через конкатенацию
https://www.php.net/manual/ru/language.types.string.php пример 17

  • Разве функции по форматированию строк sprintf sscanf не для этого были придуманы (чтобы форматировать строку в нужный вид)?
  • Алексей Евтеев, оно работает с переменными, то есть можно добавить что то в начало или конец переменной и так же поиграть с типами, но не по символьно, возможно можно как то запилить через регулярки, но это тоже не будет красиво
    хотя вполне красиво. Там дали пример

Ответы:

Вряд-ли можно найти тут решение в 1 шаг. По смыслу задача звучит так. Дано число в Hex нотации.
Отформатировать его как UUID.

strval(new UUID("392981414524f56f68d9f4a47e7072f2")

strval(new UUID("392981414524f56f68d9f4a47e7072f2")

Это - гипотетический код который мог-бы быть PHP

Нужно решить такую задачу?

Опишите проблему, и специалист поможет с настройкой, исправлением ошибки или доработкой сайта. Подберём понятный план работ без лишней переписки.

Заказать помощь
Лучший ответ
1
Павел Админов Ответ

Для разбиения строки через разделитель несколько раз в PHP можно воспользоваться функцией explode(). Эта функция разбивает строку на подстроки, используя заданный разделитель, и возвращает массив с этими подстроками.

Пример использования функции explode() для разбиения строки через разделитель несколько раз:

$string = "apple,orange,banana,grape";
$separator = ",";
$parts = explode($separator, $string);

$string = "apple,orange,banana,grape"; $separator = ","; $parts = explode($separator, $string);

В данном примере строка "apple,orange,banana,grape" будет разбита на подстроки с использованием запятой в качестве разделителя. Результатом будет массив $parts, содержащий четыре элемента: "apple", "orange", "banana", "grape".

Если необходимо разбить строку только определенное количество раз, можно воспользоваться третьим параметром функции explode(), который указывает максимальное количество элементов, на которое нужно разбить строку:

$string = "apple,orange,banana,grape";
$separator = ",";
$limit = 2;
$parts = explode($separator, $string, $limit);

$string = "apple,orange,banana,grape"; $separator = ","; $limit = 2; $parts = explode($separator, $string, $limit);

В этом примере строка будет разбита на две подстроки с использованием запятой в качестве разделителя. Результатом будет массив $parts, содержащий два элемента: "apple" и "orange,banana,grape".

Таким образом, используя функцию explode() с параметрами разделителя и максимального количества элементов, можно легко разбить строку через разделитель несколько раз в PHP.

Другие ответы (0)

Пока нет других ответов. Будьте первым, кто поможет автору.

Ответить на вопрос

комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Вам также может быть интересно