Как взорвать строку справа налево? - PullRequest
17 голосов
/ 04 апреля 2009
$split_point = ' - ';
$string = 'this is my - string - and more';

Как сделать разделение, используя второй экземпляр $ split_point, а не первый. Можно ли как-то указать поиск справа налево? Лучший простой подход?

В основном, как я могу взорваться справа налево. Я хочу забрать последний экземпляр "-".

Результат мне нужен:

$item[0]='this is my - string'; $item[1]='and more';

а не:

$item[0]='this is my'; $item[1]='string - and more';

Ответы [ 10 ]

27 голосов
/ 04 апреля 2009

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

$split_point = ' - ';
$string = 'this is my - string - and more';

$result = array_map('strrev', explode($split_point, strrev($string)));

Не уверен, что это лучшее решение.

12 голосов
/ 04 апреля 2009

Как насчет этого:

$parts = explode($split_point, $string);
$last = array_pop($parts);
$item = array(implode($split_point, $parts), $last);

Не собирается выигрывать какие-либо награды в гольфе, но это показывает намерение и работает хорошо, я думаю.

6 голосов
/ 20 апреля 2012

Вот еще один способ сделать это:

$split_point = ' - ';
$string = 'this is my - string - and more';

$stringpos = strrpos($string, $split_point, -1);
$finalstr = substr($string,0,$stringpos);
4 голосов
/ 04 апреля 2009

Если я правильно понимаю, вы хотите, чтобы пример из примера дал вам («это моя строка», «и многое другое»)?

Кажется, что встроенный split / explode предназначен только для пересылки - вам, вероятно, придется реализовать его самостоятельно с помощью strrpos. (поиск слева направо)

$idx = strrpos($string, $split_point);
$parts = array(substr($string, 0, $idx), substr($string, $idx+strlen($split_point)))
2 голосов
/ 04 апреля 2009

Почему бы не разделить на '-', а затем объединить первые две записи массива, которые вы снова собрали?

1 голос
/ 28 ноября 2017

это моя - строка - и многое другое

  1. Используйте общую функцию разнесения, чтобы получить все строки
  2. Получить размер массива и получить последний элемент
  3. Вывести последний элемент, используя функцию array_pop .
  4. Имплозировать оставшуюся строку с тем же разделителем (если вы хотите, чтобы другой разделитель мог использовать).

код

$arrSpits=explode("", "this is my - string - and more");
$arrSize=count($arrSpits);

echo "Last string".$arrSpits[arrSize-1];//Output: and more


array_pop(arrSpits); //now pop the last element from array

$firstString=implode("-", arrSpits);
echo "First String".firstString; //Output: this is my - string
1 голос
/ 09 июля 2015

Мне понравился ответ Моффа, но я улучшил его, ограничив число элементов до 2 и перевернув массив:

$split_point = ' - ';
$string = 'this is my - string - and more';

$result = array_reverse(array_map('strrev', explode($split_point, strrev($string),2)));

Тогда $ результат будет:

Array ( [0] => this is my - string [1] => and more )
1 голос
/ 15 июля 2011

Я споткнулся так же и исправил это так:

$split_point = ' - ';
$string = 'this is my - string - and more';

$reverse_explode = array_reverse(explode($split_point, $string));
0 голосов
/ 21 ноября 2014
$split_point = ' - ';
$string = 'this is my - string - and more';
$result = end(explode($split_point, $string));

Это нормально работает

0 голосов
/ 06 апреля 2009

Если вы хотите, чтобы игнорировалось только первое вхождение $ split_point, это должно работать для вас:

# retrieve first $split_point position
$first = strpos($string, $split_point);
# retrieve second $split_point positon
$second = strpos($string, $split_point, $first+strlen($split_point));
# extract from the second $split_point onwards (with $split_point)
$substr = substr($string, $second);

# explode $substr, first element should be empty
$array = explode($split_point, $substr);

# set first element as beginning of string to the second $split_point
$array[0] = substr_replace($string, '', strpos($string, $substr));

Это позволит вам разделить каждое вхождение $ split_point после (и в том числе) второго вхождения $ split_point.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...