Подтвердить что ты не робот

Отдельная строка в два по заданной позиции

$string = 'Some string';
$pos = 5;

...??...

$begging // == 'Some s';
$end // == 'tring';

Каков наилучший способ отделить строку по две от заданной позиции?

4b9b3361

Ответ 1

Вы можете использовать substr, чтобы получить две подстроки:

$str1 = substr($str, 0, $pos);
$str2 = substr($str, $pos);

Если вы опускаете третью длину параметра, substr берет оставшуюся часть строки.

Но для получения вашего результата вам действительно нужно добавить его в $pos:

$string = 'Some string';
$pos = 5;
$begin = substr($str, 0, $pos+1);
$end = substr($str, $pos+1);

Ответ 2

Регулярное решение (если вы в нем):

...
$string = 'Some string xxx xxx';
$pos = 5;

list($beg, $end) = preg_split('/(?<=.{'.$pos.'})/', $string, 2);

echo "$beg - $end";

Привет

БВУ

Ответ 3

Как насчет substr()?

$string = 'Some string';
$pos = 5;

$beginning = substr($string, 0, $pos);
$end = substr($string, $pos);

Ответ 4

Каков наилучший способ разделить строка в два по заданной позиции?

Если я правильно вас понимаю, вы можете сделать:

$str = 'hello world';
$pos = 5;

$separated_str = substr($str, $pos);
echo $separated_str;

Результат:

world

Это зависит от структуры вашей строки, поскольку есть и другие способы разделить строку.

Ответ 5

Я искал быстрый способ разбить строку в заданной позиции.

Почему данная позиция? Обычно вам нужно разделить персонаж (я думаю, что вы искали по позиции, потому что функция разрыва разделила строку на слишком много частей):

Мое решение было окончательно:

$string = "hello world my dear";
list ($first, $remaining ) = split (' ', $string, 2); //limit to 2 pieces
echo $first; //"hello";
echo $remaining; //"world my dear";

Обратите внимание, что я отказался от использования "позиции" (я использовал "substr" для его получения).

Учитывая, что ваша потребность в "позиции" действительно не нужна, мое решение является самым быстрым среди всех вышеперечисленных и не имеет многобайтовых проблем. Также я думаю, что читать гораздо легче.

К несчастью, эта функция устарела в последнем PHP, вы можете использовать ее, если у вас есть старый PHP или вы можете использовать preg_split. Я был не очень доволен этим, потому что единственный способ добиться такой же функциональности - злоупотреблять регулярным выражением. Если вы не можете использовать split, самая быстрая альтернатива:

$string = "hello world my dear";
list ($first, $remaining ) =  preg_split('/\s+/', $string, 2);

который намного быстрее, чем @rubber, и вообще не использует позицию.

Ссылка: Разделить документацию

Ответ 6

Wordwrap работает лучше, на мой взгляд.

$text = "The quick brown fox jumped over the lazy dog.";
$newtext = wordwrap($text, 20, "<br />\n");
echo $newtext;

Вышеприведенный пример выводит:

The quick brown fox<br />
jumped over the lazy<br />
dog.

Другой пример:

$text = "A very long woooooooooooord.";
$newtext = wordwrap($text, 8, "\n", true);

echo "$newtext\n";

Вышеприведенный пример выводит:

A very
long
wooooooo
ooooord.

Ответ 7

<?php
$string = 'Some string';
$pos = 6;
$number_of_pieces = 2;
list($beginning, $end) = split_into_pieces($string, $pos, $number_of_pieces);
// $beginning === 'Some s'; $end === 'tring'

function split_into_pieces($string, $length, $limit = 0) {
  --$length;
  return preg_split("/(?<=^..{{$length}}|(?!^)\\G.{{$length}})/", $text, $limit);
}
  • $string - это строка для разделения
  • $length - размер каждой части в кодовых точках Unicode (или символы ASCII, если не используется опция UTF-8, см. ниже). Любое значение меньше 1 будет возвращать всю входную строку в виде отдельной части
  • $limit - максимальное число или фрагменты, или 0 для неограниченного количества. Последняя часть будет содержать оставшуюся часть строки и может быть длиннее или короче $length

Регулярное выражение, использующее магию, использует положительный внешний вид (?<=... ). Он ищет ^, который является началом строки, |, или если он не находится в начале строки (?!^), он ищет \G, который является позицией предыдущего совпадения. . - любой символ, { n } повторяется n раз, где n равно {$length}. При использовании \G по какой-то причине он добавляет дополнительный символ, поэтому строка --$length; и почему первое совпадение содержит дополнительный . для поиска дополнительной кодовой точки, что обычно не допускается в смотрите-зады. Я думаю, что утверждения нулевой ширины ^ и \G фиксируют шаблон, позволяя разную длину в обратном направлении.

Дополнительные { и } вокруг $length необходимы, чтобы остановить фигурные скобки регулярных выражений как экранированную переменную PHP. /su являются параметрами регулярных выражений. Опция /s говорит, что . соответствует символам новой строки. Опция /u указывает, что она соответствует кодовым точкам Unicode, закодированным как UTF-8 (удалите u, если вы обрабатываете строки, не совместимые с UTF-8).