Ответы пользователя по тегу Алгоритмы
  • Как найти самое близкое значение в многомерном массиве?

    kimono
    @kimono
    Web developer
    /**
     * @param array $input
     * @param array $items
     *
     * @return int|null
     */
    function compare(array $input, array $items)
    {
        foreach ($items as $index => $item) {
            $compareResult = version_compare(implode('.', $input), implode('.', $item));
            if ($compareResult <= 0) {
                if ($compareResult === 0 || !array_key_exists($index - 1, $items)) {
                    return $index;
                }
    
                return $index - 1;
            }
        }
    
        return null;
    }
    
    $items = [
        [1, 1, 1],
        [1, 2, 1],
        [1, 2, 2],
        [1, 5, 4],
        [1, 5, 6],
        [2, 1, 6],
        [2, 2, 2],
    ];
    $input = [1, 5, 5];
    
    if (null === $index = compare($input, $items)) {
        echo 'Элемент не найден';
    } else {
        echo "Элемент под номером {$index} является наиболее близким";
    }
    Ответ написан
    Комментировать
  • Алгоритм парсинга страниц по списку ключевых слов?

    kimono
    @kimono
    Web developer
    sandbox.onlinephpfunctions.com/code/37932fd36ced8e...
    $text = 'Добрый день.Вопрос про сам процесс парсинга страницы, а не ее получение (с помощью curl или любого другого инструмента).
    Есть некая страница (HTML-документ) и список ключевых слов. Необходимо получить количество вхождений каждого слова на странице. Мне пришло в голову только генерировать регулярку (что-то вроде (слово1|слово2|слово3)), а потом считать простым перебором количество вхождений. 
    Какие есть более изящные решения? Реализовывать предполагаю на PHP или nodejs.';
    
    preg_match_all('/слово|документ/ui', $text, $matches, PREG_PATTERN_ORDER);
    
    print_r($matches);


    Array
    (
        [0] => Array
            (
                [0] => документ
                [1] => слово
                [2] => слово
                [3] => слово
            )
    )
    Ответ написан