我有问题,它无法检测到字符串中的每个单词。类似于过滤器或标签或类别或种类..
$title = "What iS YouR NAME?";
$english = Array( 'Name', 'Vacation' );
if(in_array(strtolower($title),$english)){
$language = 'english';
} else if(in_array(strtolower($title),$france)){
$language = 'france';
} else if(in_array(strtolower($title),$spanish)){
$language = 'spanish';
} else if(in_array(strtolower($title),$chinese)){
$language = 'chinese';
} else if(in_array(strtolower($title),$japanese)){
$language = 'japanese';
} else {
$language = null;
}
输出为空.. = /
答案 0 :(得分:2)
输出为null
,因为字符串"what is your name?"
不在任何语言数组中。请注意,您不应在代码中编写语言名称。
相反,字典或语言数组(以字典或对象的形式)允许将来扩展并将数据与控制逻辑分离。
答案 1 :(得分:2)
这里没有真正的问题...... $title
中的字符串不在您正在测试的任何数组中,即使是小写字母。
尝试测试每个语言标签中的每个单词而不是字符串。
$english = Array( 'Name', 'Vacation' );
$languages = array('english'=>$english,
'france'=>$france,
'spanish'=>$spanish,
'chinese'=>$chinese,
'japenese'=>$japenese);
while($line = mysql_fetch_assoc($result)) {
$title = $line['title'];
//$lower_title = strtolower($title); stristr() instead.
$language_found = false;
foreach($languages as $language_name=>$language) {
idx = 0;
while(($language_found === false) && idx < count($language)) {
$word = $language[$idx];
if(stristr($title, $word) !== false) {
$language_found = $language_name;
}
$idx++;
}
}
// got language name or false...
}
您当然也可以使用explode
来破坏字符串,并测试每种语言在创建的数组中的每个单词。
答案 2 :(得分:1)
有几个逻辑问题:
第一个问题是您正在尝试查看多字词串是否在单个单词数组中。总是找不到匹配。您需要将$title
与explode分开并循环显示。
ie)$title_words = explode(' ', strtolower($title));
foreach($title_words as $word){
//check language
//now you can use in_array and expect some matches
}
然而,这是第二个问题。如果一个单词是多种语言?
第三个问题是在您的示例中,您已将搜索字符串转换为小写,但您的匹配数组的所有单词都包含大写的第一个字母。
即)
$english = Array( 'Name', 'Vacation' );
应该是
$english = array( 'name', 'vacation' );
如果你期待比赛