2016-11-25 148 views
0

我有七个行文本删除文本。我想用PHP来做下面的事情。使用str_replace函数

首先,我想删除所有没有在他们所说的“MARCO1998”行。

然后,剩余的线路,我想删除除1-3号字“地图”

然后,还有后只有七排1-3号离开后的一切,我想删除重复项。

17.10.16 11:32:39 MAP104 MARCO1998 zerstoert NIGHTRIDER 
17.10.16 14:17:25 MAP66 MARCO1998 zerstoert SPARTACULS 
17.10.16 14:26:15 MAP66 MARCO1998 zerstoert SUPERONE 
17.10.16 23:09:04 MAP104 MARCO1998 zerstoert JOCKSTRAP7 
18.10.16 14:27:45 MAP244 MARCO1998 zerstoert MARIA07 
18.10.16 19:50:37 MAP40 MARCO1998 zerstoert LILIENKILL 
19.10.16 07:08:41 MAP186 KOBOLD1 zerstoert MARCO1998 
+0

的StackOverflow是不是免费的编码服务,而其他人写的完整代码的解决方案为您服务。告诉我们你到目前为止已经尝试了什么,以及在什么时候卡住了,你可能会得到答案。 – Striezel

+0

所以,你可以分享你已经尝试过的代码? –

+0

@RicardoPontual我已经有一个答案 – baloonrocket

回答

0
<?php 
// Input string with newlines 
$str = "17.10.16 11:32:39 MAP104 MARCO1998 zerstoert NIGHTRIDER 
17.10.16 14:17:25 MAP66 MARCO1998 zerstoert SPARTACULS 
17.10.16 14:26:15 MAP66 MARCO1998 zerstoert SUPERONE 
17.10.16 23:09:04 MAP104 MARCO1998 zerstoert JOCKSTRAP7 
18.10.16 14:27:45 MAP244 MARCO1998 zerstoert MARIA07 
18.10.16 19:50:37 MAP40 MARCO1998 zerstoert LILIENKILL 
19.10.16 07:08:41 MAP186 KOBOLD1 zerstoert MARCO1998"; 

// Split long string on newlines 
$str_split = explode("\n", $str); 
$values = []; 

// Loop each line 
foreach ($str_split as $v) { 
    // If the line does not contain MARCO1998, we skip this line 
    if (strpos($v, 'MARCO1998') === false) { 
     continue; 
    } 

    // Use regex to capture MAP<integer>{1,3} 
    preg_match_all('/MAP(?P<id>[0-9]{1,3})/', $v, $matches); 

    // Make sure that the match returned a valid result 
    if (isset($matches['id']) and isset($matches['id'][0]) and strlen($matches['id'][0]) > 0) { 
     $values[] = $matches['id'][0]; 
    } 
} 

print_r($values); // 104, 66, 66, 104, 244, 40, 186 

// If you only like to have the unique values 
$values = array_unique($values); 
print_r($values); // 104, 66, 244, 40, 186 

// Output each ID 
foreach ($values as $v) { 
    echo $v; 
} 
+0

你好,这是否删除重复值?对不起,我把它添加到我的帖子有点晚了。 – baloonrocket

+0

@baloonrocket我已经编辑我的回答过滤掉重复。希望这能解决你的问题。如果有,请接受答案。 – OptimusCrime

+0

谢谢。还有一件事。我尝试使用'implode'函数,但它不工作....我需要显示每个结果在前一个,而不是在一个数组中。感谢您一直以来的帮助。我会接受你的回答,我怎么能给你声望? – baloonrocket