if(in_array(<title>,$ SomeArray))返回true </title>

时间:2011-07-14 16:02:52

标签: php arrays variables filter categories

我有问题,它无法检测到字符串中的每个单词。类似于过滤器或标签或类别或种类..

$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;
}

输出为空.. = /

3 个答案:

答案 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)

有几个逻辑问题:

第一个问题是您正在尝试查看多字词串是否在单个单词数组中。总是找不到匹配。您需要将$titleexplode分开并循环显示。

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' );

如果你期待比赛