2013-07-01 70 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')); 

根据文本文件中给定的一行,函数将测试它是否以特定作业结束;如果是这样,名称就是它前面的部分。

相关问题