Как взорвать строку справа налево?

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

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

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

Результат Мне нужно:

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

и не:

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

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

 $split_point = ' - '; $string = 'this is my - string - and more'; $result = array_map('strrev', explode($split_point, strrev($string))); 

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

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

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

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

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

 $split_point = ' - '; $string = 'this is my - string - and more'; $stringpos = strrpos($string, $split_point, -1); $finalstr = substr($string,0,$stringpos); 

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

Встроенная функция split / explode кажется передовым – вам, вероятно, придется реализовать ее самостоятельно с помощью strrpos. (поиск в правом левом углу)

 $idx = strrpos($string, $split_point); $parts = array(substr($string, 0, $idx), substr($string, $idx+strlen($split_point))) 

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

Я наткнулся на то же самое и зафиксировал его так:

 $split_point = ' - '; $string = 'this is my - string - and more'; $reverse_explode = array_reverse(explode($split_point, $string)); 

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

 $split_point = ' - '; $string = 'this is my - string - and more'; $result = array_reverse(array_map('strrev', explode($split_point, strrev($string),2))); 

Тогда $ result будет:

 Array ( [0] => this is my - string [1] => and more ) 

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

  1. Используйте общую функцию разрыва, чтобы получить все строки
  2. Получить массив sizeof и извлечь последний элемент
  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 

Предполагая, что вы хотите, чтобы первое вхождение $ 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.

 $split_point = ' - '; $string = 'this is my - string - and more'; $result = end(explode($split_point, $string)); 

Это прекрасно работает