$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 )
это моя строка – и многое другое
Код
$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));
Это прекрасно работает