Заменить последнее слово в строке


$variable = 'put returns between paragraphs';

Значение этой переменной каждый раз меняется.

Как добавить текст перед последним словом?


Например, если мы хотим добавить 'and', результат должен быть (для этого примера):

$variable = 'put returns between and paragraphs';
Author: James, 2010-09-14

5 answers

Вы можете использовать preg_replace():

$add = 'and';
$variable = 'put returns between paragraphs';    
echo preg_replace("~\W\w+\s*$~", ' ' . $add . '\\0', $variable);

Печать:

put returns between and paragraphs

Это будет игнорировать конечные пробелы, чего не делает решение @jensgram. (например: оно сломается, если ваша строка $variable = 'put returns between paragraphs '. Конечно, вы можете использовать trim(), но зачем тратить больше памяти и вызывать другую функцию, когда вы можете сделать это с помощью регулярного выражения? :-)

 2
Author: NullUserException, 2010-09-13 20:53:18

Вы можете найти последний пробел, используя strrpos() функция:

$variable = 'put returns between paragraphs';
$lastSpace = strrpos($variable, ' '); // 19

Затем возьмите две подстроки (до и после последнего пробела) и оберните вокруг "и":

$before = substr(0, $lastSpace); // 'put returns between'
$after = substr($lastSpace); // ' paragraphs' (note the leading whitespace)
$result = $before . ' and' . $after;

РЕДАКТИРОВАТЬ
Хотя никто не хочет возиться с индексами подстрок, это очень базовая задача, для которой PHP поставляется с полезными функциями (в частности, strrpos() и substr()). Следовательно, нет необходимости жонглировать массивами, перевернутыми строками или регулярные выражения - но вы можете, конечно:)

 10
Author: jensgram, 2010-09-13 20:43:32
1) reverse your string
2) find the first whitespace in the string.
3) chop off the remainder of the string.
4) reverse that, append your text
5) reverse and add back on the first portion of the string from step 3, including extra whitespace as needed.
 1
Author: Zak, 2010-09-13 20:42:19

Другой вариант

  <?php
  $v = 'put returns between paragraphs';
  $a = explode(" ", $v);
  $item = "and";
  array_splice($a, -1, 0, $item);
  echo  implode(" ",$a);
  ?>
 1
Author: mcgrailm, 2010-09-13 20:50:13
$addition = 'and';
$variable = 'put returns between paragraphs';
$new_variable = preg_replace('/ ([^ ]+)$/', ' ' . $addition . ' $1', $variable);
 1
Author: Tim Cooper, 2010-09-13 20:58:41