亲爱的, 我有一个像txt文件:
--start--
jeff
--end--
--start--
sophya
--end--
现在我需要将像jeff和sophya这样的名字收集到一个数组中。我怎么做?我使用下面的代码,但它没有给我正确的输出。
$data = file_get_contents('http://localhost/sample.txt');
$start_position = strstr($data,'--start--');
$end_position = strpos($data,'--end--') ;
$value=substr($start_position,$end_position);
print_r($value);
exit();
我的出局是:--end-- --start-- sophya --end--
他们是谁帮助我将两个名字放入阵列? 谢谢in advance.riad
答案 0 :(得分:3)
您可以在这里使用一些方法......我个人会使用正则表达式来匹配您需要的内容。 preg_match_all()
$contents = file_get_contents('http://localhost/sample.txt');
preg_match_all('/--start--(.*?)--end--/ms', $contents, $matches);
foreach($matches[1] as $name) {
var_dump($name);
}
注意:这包括每一行的行尾字符。要从名称和空格中排除它们,请使用模式'/--start--\n\s*(.*?)\s*\n--end--/ms'
我应该提一下,这样做的好处是它会自动忽略那些格式不正确的东西。
e.g。在以下文件中,asd
将被忽略。
--start--
jeff
--end--
asd
--start--
sophya
--end--
答案 1 :(得分:1)
$data = file_get_contents('http://localhost/sample.txt');
$data = str_replace('--end--', ' ', $data); // remove existence of --end--
$data = explode('--start--', $data); // resulted array
unset($data[0]);
echo implode(' ', $data);
答案 2 :(得分:0)
$data = '--start--
jeff
--end--
--start--
sophya
--end--';
preg_match_all('/--start--\n(.*)\n--end--/iu', $data, $matches);
var_dump($matches);
这假设你在--start--之后和--end -
之后总是有一个新行