PHP заменить строку

$name (string) дает что-то вроде (возможное значение):

 John II, Litten Draw 

Мы должны обновить $name в два этапа:

  1. Поймать слова перед первой запятой и бросить их до конца строки
  2. Удалить первую запятую
  3. Создайте файл current_name.txt (или обновите, если он уже существует) и введите ему источник $name

«John II, Litten Draw» следует заменить на «Litten Draw John II».

Благодарю.

Related of "PHP заменить строку"

Вот пример кода, который должен работать нормально:

 <?php function getCanonicalName($name) { // Check for the existance of a comma and swap 'elements' if necessary. if(strpos($name, ',') !== false) { list($surname, $forename) = explode(',', $name); $name = $forename . ' ' . $surname; } // Trim the name. return trim($name); } // Test data and file I/O. $outputData = ''; $testData = array('Obama, Barak', 'Federer, Roger', 'John Parker'); foreach($testData as $name) { $outputData .= getCanonicalName($name) . "\n"; } file_put_contents('current_name.txt', $outputData, FILE_APPEND); ?> 

Кстати, это (как и все решения, которые в настоящее время связаны с вашим вопросом) приведет к потере данных, если в $ name есть более одной запятой. Таким образом, если это возможно, вы должны обновить getCanonicalName, чтобы удовлетворить эту возможность.

Как это?

 $split = explode(",", $name, 1); $name = trim($split[1]) . " " . trim(split[0]); 

Тогда это просто базовый ввод-вывод .

Если у вас есть список слов (при условии, что все они находятся на отдельных строках):

 $list = explode("\n", $names); $nnames = ""; foreach($list as $name) { $split = explode(",", $name); $nnames .= trim($split[1]) . " " . trim(split[0]) . "\n"; } 

Это регулярное выражение должно сделать это для вас …

 preg_replace('#\\b(\\w+),\\s*(\\w+)\\b#', '\\2 \\1', $string); 

В основном, он ищет:

  1. Ограничение слов (часть \\b )
  2. Затем один или несколько символов слова (часть \\w+ )
  3. Затем запятая, за которой следуют ноль или более пробельных символов ( ,\\s* )
  4. Затем один или несколько символов слова (часть \\w+ )
  5. Наконец, еще одна граница слов …

регулярные выражения – путь сюда

 $a = "Obama, Barak"; echo preg_replace('~(\w+)\W+(\w+)~', "$2 $1", $a); 

также работает для нескольких имен:

 $a = " Obama, Barak Federer, Roger Dickens, Charles "; echo preg_replace('~(\w+)\W+(\w+)~', "$2 $1", $a); 

См. strpos чтобы найти запятую, ltrim чтобы удалить пробел, и fopen в режиме a для добавления в файл. Вы также можете использовать explode для разделения по запятой, что обычно проще