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

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

1 голос
/ 09 августа 2010

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

John II, Litten Draw

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

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

«Иоанн II, Розыгрыш Литтена» следует заменить на «Розыгрыш Литтенна Иоанна II».

Спасибо.

Ответы [ 5 ]

4 голосов
/ 09 августа 2010

Как?линии):

$list = explode("\n", $names);
$nnames = "";
foreach($list as $name)
{
        $split = explode(",", $name);
        $nnames .= trim($split[1]) . " " . trim(split[0]) . "\n";
}
2 голосов
/ 09 августа 2010

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

$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);
2 голосов
/ 09 августа 2010

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

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

По сути, он ищет:

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

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

<?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, чтобы учесть эту возможность.

1 голос
/ 09 августа 2010

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...