Как добавить символ в начало всех чисел, разделенных пробелами в строке, используя php - PullRequest
0 голосов
/ 07 февраля 2019

У меня есть строка, заполненная числами, и я пытаюсь добавить символ в начало каждой серии чисел:

$dna = "273385 14093 1522520 1759 277697 283096 1133193 191835 246752 204984 973590"

, но хочу добавить:

$dna = "m#273385 m#14093 m#1522520 m#1759 m#277697 m#283096 m#1133193 m#191835 m#246752 m#204984 m#973590"

самое близкое, что я получил, использует

$dna= preg_replace('~(\w+)~', '$1m#',$dna);

, что дает мне:

$dna = "273385m# 14093m# 1522520m#"

Как я могу получить его, чтобы добавить к фронту?

Ответы [ 4 ]

0 голосов
/ 07 февраля 2019

Здесь не указан способ (без регулярного выражения)

$dna = "273385 14093 1522520 1759 277697 283096 1133193 191835 246752 204984 973590";
$dna = 'm#'.implode(' m#', explode(' ', $dna));
echo $dna;

Песочница

Предполагается, что строка не будет пустой, если это выв результате вы получите m#, если вы не проверите сначала.И, что в строке есть только цифры.

Вы можете легко исправить первое из них.

   $dna = empty($dna) ? '': 'm#'.implode(' m#', explode(' ', $dna));
0 голосов
/ 07 февраля 2019

Вы можете использовать str_replace для внесения изменений.

$dna = "273385 14093 1522520 1759 277697 283096 1133193 191835 246752 204984 973590";
$dna = 'm#' . str_replace(' ',' m#',$dna);
0 голосов
/ 07 февраля 2019

.. или общий случай?(Я предполагаю, что формат строки - это группы цифр, разделенных одним пробелом)

define('DNA_SEPARATOR', ' ');
define('DNA_PREFIX', 'm#');

$dna = "273385 14093 1522520 1759 277697 283096 1133193 191835 246752 204984 973590";
$arr = explode(DNA_SEPARATOR, $dna);

// In case you're not sure it's all groups of digits
// $arr = array_filter($arr, function($v) { return is_numeric($v); });

$arr = array_map(function($v) { return DNA_PREFIX.$v; }, $arr);
$dna = implode(DNA_SEPARATOR, $arr);
0 голосов
/ 07 февраля 2019

Вы можете использовать

preg_replace('~\d+~', 'm#$0', $dna)

См. Демонстрационную версию regex

. \d+ будет соответствовать полосам из 1 или более цифр, а m#$0 будет заменять каждуюсоответствует m# и всему значению совпадения (упоминается как $0 обратная ссылка).

См. PHP демо :

$dna = "273385 14093 1522520 1759 277697 283096 1133193 191835 246752 204984 973590";
echo preg_replace('~\d+~', 'm#$0', $dna);
// => m#273385 m#14093 m#1522520 m#1759 m#277697 m#283096 m#1133193 m#191835 m#246752 m#204984 m#973590
...