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

Есть хэш сумма файла, например, 392981414524f56f68d9f4a47e7072f2
Можно в одно действие, например с помощью sprintf\sscanf, привести строку к такому формату: 39298141-4524-f56f-68d9-f4a47e7072f2
  • Вопрос задан
  • 241 просмотр
Решения вопроса 4
Rsa97
@Rsa97
Для правильного вопроса надо знать половину ответа
$result = preg_replace('~^(.{8})(.{4})(.{4})(.{4})(.*)~', '$1-$2-$3-$4-$5', $str);
Ответ написан
Комментировать
nokimaro
@nokimaro
Меня невозможно остановить, если я смогу начать.
Самый простой и лаконичный вариант
$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);
Ответ написан
Fragster
@Fragster
помогло? отметь решением!
Ответ написан
Комментировать
Compolomus
@Compolomus Куратор тега PHP
Комполом-быдлокодер
Можно, но это не будет красиво. Символ из строки можно печатать по его порядковому номеру(индексу). Если строка всегда одного паттерна, то записать её через конкатенацию
https://www.php.net/manual/ru/language.types.string.php пример 17
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
mayton2019
@mayton2019
Bigdata Engineer
Вряд-ли можно найти тут решение в 1 шаг. По смыслу задача звучит так. Дано число в Hex нотации.
Отформатировать его как UUID.

strval(new UUID("392981414524f56f68d9f4a47e7072f2")


Это - гипотетический код который мог-бы быть PHP
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы