$name
(string) дает что-то вроде (возможное значение):
John II, Litten Draw
Мы должны обновить $name
в два этапа:
current_name.txt
(или обновите, если он уже существует) и введите ему источник $name
«John II, Litten Draw» следует заменить на «Litten Draw John II».
Благодарю.
Вот пример кода, который должен работать нормально:
<?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);
В основном, он ищет:
\\b
) \\w+
) ,\\s*
) \\w+
) регулярные выражения – путь сюда
$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
для разделения по запятой, что обычно проще