Как сравнить несколько элементов массива с одним элементом массива для сценария отгадывания слов - PullRequest
0 голосов
/ 10 октября 2019

Я делаю функцию, которая сравнивает массив элементов (символов) с другим массивом, содержащим слово. Пока у меня есть эта функция, но она возвращает not found, кроме, если я изменяю символы на один элемент, идентичный переменной $randomWord.

Мне нужна функция для сравнения всех элементов массива в $correctLetters массив для слова в массиве $randomWord, и если их больше, то есть 3 совпадающих символа, я хочу, чтобы он угадал данное слово.

Кажется, я не могу обернуть его вокруг, так как я 'До сих пор мы пробовали много функций без успеха.

$randomWord = ['fiets'];
$correctLetters = ['f', 'e', 's'];

//raad het woord 
function getWordBasedOnLetter($correctLetters, $randomWord)
{
    foreach ($correctLetters as $array) {
        if (in_array($array, $randomWord)) {
            return "found";
        }
    }
    return "not found";
}

Ответы [ 2 ]

0 голосов
/ 10 октября 2019

Один из способов сделать это - разбить случайное слово на символы, а затем использовать array_intersect, чтобы найти совпадающие символы между ним и набором правильных букв. Если счетчик этого массива> = 3, слово найдено:

function getWordBasedOnLetter($correctLetters, $randomWord)
{
    $randomLetters = str_split($randomWord);
    $matchingLetters = array_intersect($correctLetters, $randomLetters);
    if (count($matchingLetters) >= 3) {
        return "found";
    }
    return "not found";
}

Для ваших данных выборки это выдает found. Демонстрация на 3v4l.org

Обновление

Если вы хотите сделать тест на основе длины случайного слова, вероятно, лучшеиспользовать array_diff, так как это будет работать лучше, если в $randomWord есть дублированные буквы. В этом случае установите для теста количество несоответствующих букв, которое должно быть меньше порога длины слова (например, 40%):

function getWordBasedOnLetter($correctLetters, $randomWord)
{
    $randomLetters = str_split($randomWord);
    $differentLetters = array_diff($randomLetters, $correctLetters);
    if (count($differentLetters) < .4 * strlen($randomWord)) {
        return "found";
    }
    return "not found";
}

Демонстрация на 3v4l. орг

0 голосов
/ 10 октября 2019

попробуйте

array_diff(array1,array2);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...