Php if(在数组(,$SomeArray)中)返回true

Php if(在数组(,$SomeArray)中)返回true,php,arrays,variables,filter,categories,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 = 'fran

我的问题是它不能检测到字符串中的每个单词。类似于过滤器、标签、类别或排序

$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;
}
输出为空=/

输出为空,因为字符串的名称是什么?不在任何语言数组中。请注意,不应在代码中编写语言名称

相反,字典或字典或对象形式的语言数组允许将来扩展,并将数据与控制逻辑分离。

输出为空,因为字符串的名称是什么?不在任何语言数组中。请注意,不应在代码中编写语言名称


相反,字典或字典或对象形式的语言数组允许将来扩展,并将数据与控制逻辑分离。

这里没有真正的问题。。。$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来中断字符串,并测试为每种语言创建的数组中的每个单词。

这里没有真正的问题。。。$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来中断字符串,并测试为每种语言创建的数组中的每个单词。

有几个逻辑问题:

第一个问题是,您试图查看多单词字符串是否位于单个单词数组中。那总是找不到匹配的。您需要将$title与拆分,并在单词上循环

ie$title\u words=explode'',strtolower$title

然而,这又提出了第二个问题:如果一个词有多种语言,该怎么办

第三个问题是在您的示例中,您已经将搜索字符串转换为小写,但是您的匹配数组中的所有单词都有大写首字母。 即 $english=数组'Name','Vacation';应该是 $english=数组'name','vacation'


如果您希望匹配,则有几个逻辑问题:

第一个问题是,您试图查看多单词字符串是否位于单个单词数组中。那总是找不到匹配的。您需要将$title与拆分,并在单词上循环

ie$title\u words=explode'',strtolower$title

然而,这又提出了第二个问题:如果一个词有多种语言,该怎么办

第三个问题是在您的示例中,您已经将搜索字符串转换为小写,但是您的匹配数组中的所有单词都有大写首字母。 即 $english=数组'Name','Vacation';应该是 $english=数组'name','vacation'


如果您希望匹配

我询问是否可以在$title中使用带空格的explode?现在将尝试测试它。。请给我不到5分钟的时间。@user453089是explode的第一个参数是分隔符,它设置为在空格处打断字符串。我尝试了很多$title。。其中一个$title是工作,其他的不是…我问是否可以在$title中使用带空格的explode?现在将尝试测试它。。请给我不到5分钟的时间。@user453089是explode的第一个参数是分隔符,它设置为在空格处打断字符串。我尝试了很多$title。。其中一个$title是work,另一个不是…它可以工作,但它给出了错误:警告:strps[function.strps]:第47行的/***.php中的空分隔符您是对的,我必须使用strstr;相反,我将编辑它。可能口译员不喜欢ifstrstr$lower\u title,$word,我将使用ifstrstr$lower\u title,$word再次编辑-我想你有一个致命的。。。我认为strstr更适合这个工作,因为strpo返回的值可以是多种不同的类型;继续,直到mySQL的最后一行。。。然后,这给了我同样的错误,说空分隔符有效,但它给了错误:警告:strps[function.strps]:第47行的/***.php中的空分隔符你是对的,我必须使用strstr;相反,我将编辑它。可能口译员不喜欢ifstrstr$lower\u title,$word,我将使用ifstrstr$lower\u title,$word再次编辑-我想你有一个致命的。。。我认为strstr更适合这个工作,因为strpo返回的值可以是多种不同的类型;继续,直到mySQL的最后一行。。。然后,这给了我同样的错误,说空分隔符