3

我需要在我的$lines. 所以我foreach在每一行都这样做:

foreach ($lines as $n => $line) {

}

但接下来的部分,我只需要抓住第一个词。所以我通过在这样的空间上爆炸来做到这一点:

$explode = explode(" ", $line);
echo $explode[0];

但是当我用很多行来做这件事时,这非常慢,有没有比使用更好更快的解决方案explode()

4

6 回答 6

6

是的!

$var = substr( $line, 0, strpos( $line, ' ' ) );

substr()使用起始位置(0,开头)和长度修剪字符串:http: //php.net/manual/en/function.substr.php

我们通过strpos()查找第一次出现的搜索短语(在本例中为空格)来确定长度:http: //php.net/manual/en/function.strpos.php

于 2013-10-01T14:22:04.447 回答
3

使用strpossubstr。使用 strpos 获取第一个空格的索引,然后将该索引用作 substr 的结尾。这将节省您爆炸每一行的时间。

于 2013-10-01T14:22:26.210 回答
1

使用字符串令牌函数 http://www.w3schools.com/php/func_string_strtok.asp

于 2013-10-01T14:24:00.720 回答
0

使用正则表达式。这应该在第一个空格之前得到匹配。(?:^|(?:\.\s))(\w+)

于 2013-10-01T14:24:15.570 回答
0

你应该试试这个:

list($firstWord) = explode(" ",trim($line));

这里

于 2013-10-01T14:24:48.883 回答
0

您还可以使用带限制的爆炸

explode(" ", $line, 1);

explode虽然这比没有限制要快得多,但并没有substr()用户建议的解决方案那么快:Set Sail Media.

在我的 100K 行测试中,每行大约有 10K 个单词:

explode       : 175s
explode+limit : 0s
substr()      : 0s

使用 1M 行,每行大约有 20K 个单词:

explode       : too long :-)
explode+limit : 12s
substr()      : 0s
于 2013-10-01T14:26:24.607 回答