【发布时间】:2015-04-29 16:50:15
【问题描述】:
我想检查 $words 中的所有单词是否存在于一个或多个 $sentences 中,单词顺序并不重要。
单词将只包含 [a-z0-9]。
句子将只包含 [a-z0-9-]。
到目前为止,我的代码几乎可以按预期工作:
$words = array("3d", "4");
$sentences = array("x-3d-abstract--part--282345", "3d-speed--boat-430419", "beautiful-flower-462451", "3d-d--384967");
foreach ($words as $word) {
$sentences_found = array_values(array_filter($sentences, function($find_words) use ($word) {return strpos($find_words, $word);}));
}
print_r($sentences_found);
如果你在这里运行这段代码 http://3v4l.org/tD5t5 ,你会得到 4 个结果,但实际上应该是 3 个结果
Array
(
[0] => x-3d-abstract--part--282345
[1] => 3d-speed--boat-430419
[2] => beautiful-flower-462451 // this one is wrong, no "3d" in here, only "4"
[3] => 3d-d--384967
)
我该怎么做?
还有比 strpos 更好的方法吗?
正则表达式?
正则表达式对于这项工作可能很慢,因为有时会有 1000 条 $sentences(不要问为什么)。
【问题讨论】:
-
嗯?我运行你的代码,
print_r()的结果是:Array ( [0] => this-is-simple-simple-sentence-123-aa99-311qwerty )而不是 3 个项目 -
你确定吗?我用 print_r() 得到所有 3 个结果
-
@Sunny 也为我工作! (见:3v4l.org/b2AoN)
-
我想我需要重新检查我的代码,我向您展示的这段代码只是更大代码的一部分,有些东西干扰了我的结果:) 至少这段代码按预期工作: )
-
好的,我只在我的服务器上测试了这段代码,它运行良好,所以我回答了我自己的问题,然后哈哈