我要做的是从用户那里获取输入文本(例如让我们说'Java programmer')并尝试将此用户输入与我存储在数组中的字符串列表匹配,例如'Java程序员是一个好男孩','他有时打球','java和狗互相讨厌','狗不是java程序员'
我正在尝试进行单词匹配,因此程序会输出数组中所有字符串的列表,这些字符串与用户查询中的所有单词匹配(顺序并不重要)
所以我希望以下代码的输出为......
'Java程序员是个好孩子' '狗不是java程序员'
因为根据用户输入的查询,这些术语包含“java”和“程序员”
这是我写的代码,它不起作用。任何帮助将不胜感激。
<?php
$relatedsearches = array();
$querytowords = array();
$string = "Java programmer"; //GET INPUT FROM USER
$querywords = (explode(' ', $string));
foreach($querywords as $z)
{
$querytowords[] = $z;
}
//ARRAY THAT STORES MASTER LIST OF QUERIES
$listofsearhches = array('Java programmer is a good boy', 'he plays ball at times', 'java and dogs hate each other', ' dogs are not java programmers');
foreach($listofsearhches as $c)
{
for ($i=0; $i<=(count($querytowords)-1); $i++)
{
if(strpos(strtolower($c), strtolower($querytowords[$i])) === true)
{
if($i=(count($querytowords)-1))
{
$relatedsearches[] = $c;
}
} else { break; }
}
}
echo '<br>';
if(empty($relatedsearches))
{
echo 'Sorry No Matches found';
}
else
{
foreach($relatedsearches as $lister)
{
echo $lister;
echo '<br>';
}
}
?>
答案 0 :(得分:0)
无需爆炸$string
,因为您正在寻找单词java和programmer作为字符串'Java programmer'。所以你的foreach需要看起来像这样
foreach($listofsearhches as $c)
{
if(strpos(strtolower($c), strtolower($string)) === true)
{
$relatedsearches[] = $c;
} else { break; }
}
答案 1 :(得分:0)
我会这样做: -
$matches = array();
$string = 'java programmer';
$stringBits = explode(' ', $string);
$listOfSearches = array('Java programmer is a good boy', 'he plays ball at times', 'java and dogs hate each other', ' dogs are not java programmers');
foreach($listOfSearches as $l) {
$match = true;
foreach($stringBits as $b) {
if(!stristr($l, $b)) {
$match = false;
}
}
if($match) {
$matches[] = $l;
}
}
if(!empty($matches)) {
echo 'matches: ' . implode(', ', $matches);
} else {
echo 'no matches found';
}
所以循环遍历要搜索的字符串列表,设置一个标志($match
),然后对$string
中的每个单词检查它是否存在于当前$listOfSearches
字符串中的某个位置,如果如果一个单词不存在,它会将$match
设置为false。
检查每个字后,如果$match
仍然是true
,请将当前字符串从$listOfSearches
添加到$matches
数组。
答案 2 :(得分:0)
<?php
$string = "Java programmer"; //GET INPUT FROM USER
$querywords = (explode(' ', $string));
$relatedsearches = array();
$listofsearhches = array('Java programmer is a good boy', 'he plays ball at times', 'java and dogs hate each other', ' dogs are not java programmers');
foreach ($listofsearhches as $c) {
foreach($querywords as $word){
if(strpos(strtolower($c), strtolower($word)) !== false){
if(!in_array($c, $relatedsearches))
$relatedsearches[] = $c;
break;
}
}
}
echo '<br>';
if (count($relatedsearches) < 1) {
echo 'Sorry No Matches found';
}
else {
foreach ($relatedsearches as $lister) {
echo $lister;
echo '<br>';
}
}
?>
试一试