if (in_array (<title>, $ SomeArray)) возвращает true - PullRequest
1 голос
/ 14 июля 2011

У меня проблема с тем, что он не может обнаружить каждое слово в строке.аналогично фильтру, тегу, категории или виду ..

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

вывод равен null .. = /

Ответы [ 3 ]

2 голосов
/ 14 июля 2011

Здесь нет особых проблем ... строка в $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 голосов
/ 14 июля 2011

Выходные данные null, поскольку строка "what is your name?" отсутствует ни в одном из языковых массивов. Обратите внимание, что вы не должны писать названия языков в коде.

Вместо этого, словарь или массив языков (в форме словарей или объектов) допускает расширение в будущем и отделяет данные от логики управления.

1 голос
/ 14 июля 2011

Есть несколько логических проблем:

Первая проблема заключается в том, что вы пытаетесь увидеть, состоит ли строка из нескольких слов в массиве отдельных слов.Это всегда не сможет найти совпадение.Вам нужно было бы разбить $title на взорвать и перебрать слова.

т.е.) $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' );

, если вы ожидаете совпадения

...