我想查看一个字符串,看看字符串中的任何单词是否与文本文件中的单词匹配。
假设我有一个product.txt文件,它包含:
苹果 索尼 戴森 麦当劳 iPod的
这是我的代码:
<?php
$productFile = file_get_contents('products.txt', FILE_USE_INCLUDE_PATH);
/*
* product.txt file contains
* apple
* pc
* ipod
* mcdonalds
*/
$status = 'i love watching tv on my brand new apple mac';
if (strpos($status,$productFile) !== false) {
echo 'the status contains a product';
}
else{
echo 'The status doesnt contain a product';
}
?>
现在它告诉我状态不包含它所做的产品,任何人都可以看到我出错的地方吗?
答案 0 :(得分:4)
您在字符串中搜索单词列表作为一个整体。相反,您必须分别搜索单词列表中的每个单词。例如,str_word_count
可用于将字符串拆分为单词。
<?php
$productFile = file_get_contents('products.txt');
$products = str_word_count($productFile, 1);
$status = 'i love watching tv on my brand new apple mac';
$found = false;
foreach ($products as $product)
{
if (strpos($status,$product) !== false) {
$found = true;
break;
}
}
if ($found) {
echo 'the status contains a product';
}
else {
echo 'The status doesnt contain a product';
}
?>
您可能还需要考虑stripos
而不是strpos
进行不区分大小写的比较。
答案 1 :(得分:1)
<?php
$productFile = file_get_contents('products.txt', FILE_USE_INCLUDE_PATH);
/*
* product.txt file contains
* apple
* pc
* ipod
* mcdonalds
*/
$status = 'i love watching tv on my brand new apple mac';
$status = str_replace(' ', '|', $status);
if ( preg_match('/'.$status.'/m',$productFile) ) {
echo 'the status contains a product';
}
else {
echo 'The status doesnt contain a product';
}
答案 2 :(得分:0)
首先,我认为你混淆了变量顺序(Reference)
mixed strpos ( string $haystack , mixed $needle [, int $offset = 0 ] )
然后你必须手动检查每个单词,文件中不存在整个字符串,只有一个单词。例如,使用explode()
创建一个数组,并使用foreach
循环。