2013-07-01 69 views
0

我保存爲.txt名稱和作業的列表。 例如:一部分,另一個變量

John Doe Designer\n 
Another Name AnotherJob. 

我必須分開名稱和它的工作。我用explode("\n")來分隔線條。 這是事情:我有一個數組中的所有作業名稱,我如何從字符串中提取名稱到另一個變量?所以輸出將是:

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

在這個字符串列表中,名稱和作業值是用空格分隔的嗎?你怎麼知道它是一個名字包含一個,兩個,甚至沒有空格的人?我認爲你需要重新思考你如何存儲這些數據,查看'csv'格式來獲得一個簡單的例子。 – thatidiotguy

+3

這是很難打破的,直到除非你的工作是一個字only..if幸運的是,它的工作是一個字長那麼在哪裏爆炸字符串,並使用'端()'爲job..otherwise這是很難破解這個現有系統的螺母 – 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(「作業名稱」,「」,$ string);但是,當找到一個匹配,我將知道哪些工作是更換 –

+0

那麼,你不需要第2行,如果文本已經在後,你得到的人一個數組,等於名字數組的AUTO_INCREMENT重點線路,姓氏和有工作,只要一切遵循 名姓工作的具體規則,將工作,你也可以使用'「工作」 => $ peronData [2]' –

+0

爲什麼'的作爲$鍵=> $ 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')); 

根據文本文件中給定的一行,函數將測試它是否以特定作業結束;如果是這樣,名稱就是它前面的部分。

相關問題