2013-07-01 2 views
0

У меня есть список имен и заданий, сохраненных как .txt. Ex:Извлечь часть строки в другую переменную

John Doe Designer\n 
Another Name AnotherJob. 

и я должен отделить имя и свою работу. Я использовал explode("\n"), чтобы отделить линии. Вот что: у меня есть все имена заданий в массиве, как я могу извлечь имя из строки в другую переменную? Таким образом, выход будет выглядеть следующим образом:

$name = "John Doe"; 
$job = "Designer"; 
+4

В этом списке строк указаны значения имени и задания, разделенные пробелами? Как вы узнаете, является ли это человек с именем, содержащим одно, два или даже пробелы? Я думаю, вам нужно переосмыслить, как вы храните эти данные, посмотрите на формат 'csv' для простого примера. – thatidiotguy

+3

Трудно сломать, пока ваша работа не будет единственным словом. Если, к счастью, это задание длины слова, тогда вы можете взорвать строку и использовать 'end()' для задания. В противном случае трудно взломать гайка с этой существующей системой – swapnesh

+0

Я могу оставить имя только с помощью str_replace (массив заданий, "", $ string); но я просто хочу знать, какая работа была заменена. –

ответ

0

Это не идеально, так как комментарии сохраняются, но для вашего текста это сработает. если у вас есть какой-то один с 1/3 или более частей, чтобы там назвать было бы испортить, но для примера это будет делать трюк

$text = "John Doe Designer\n Another Name AnotherJob"; 
$parts = explode("\n", $text); 

$persons = array(); 

foreach($parts as $key => $part){ 
    $personData = explode(" ", $part); 
    $job = str_replace($personData[0]." ".$personData[1], "", $part); 
    $persons[] = array(
     "fname" => $personData[0], 
     "lname" => $personData[1], 
     "job" => $job 
    ); 
} 

print_r($persons); 
+0

строки уже разделены, я просто хочу извлечь задание из строки, как и с str_replace («имя задания», «», строка $); но когда будет найдено совпадение, я узнаю, какая работа была заменена –

+0

, тогда вам не нужны первые 2 строки, если текст уже находится в строках, после чего вы получите массив людей с ключом auto_increment, который равен массиву имени, фамилия и работа, если все будет следовать правилу FirstName LastName Job, он будет работать, вы также можете использовать '' job "=> $ peronData [2]' –

+0

Почему 'as $ key => $ part' вместо просто 'как $ part'? – Tadeck

0

Если у Вас есть все имена заданий в массиве вы можете сделать что-то например:

function getName($line, array $jobs) 
{ 
    foreach ($jobs as $job) { 
     if (substr_compare($line, $job, -strlen($job)) == 0) { 
      return rtrim(substr($line, 0, -strlen($job))); 
     } 
    } 
    return false; 
} 

$line = 'John Doe Designer'; 
$name = getName($line, array('Designer')); 

На основании данной строки в текстовом файле функция проверяет, заканчивается ли она конкретным заданием; если это так, имя является частью перед ним.

Смежные вопросы