Как пройтись по массиву в php

Суть задания такая. В форме мы передаем в метод POST название домена. Так же у нас имеется база данных с черным списком доменов. И мы должны проверить, будет ли $_POST['domain_name'] == row['name'], структура массива $ row у нас примерно такая:

Array ( [id] => 1 [name] => testblacklist.com ) Array ( [id] => 2 [name] => qwerty.ru ) Array ( [id] => 3 [name] => mainmain.ru )

Вот пытался реализовать вот так, но не вышло:

function black_list($domain_name)
{
    $black_l = array();
    $mysqli = new mysqli('localhost', 'root', '', 'wordpress');
    $query = $mysqli->query('SELECT * FROM black_list');
   
    if($query->num_rows) {
        for ($i = 0; $i < $query->num_rows; ++$i) {
            $row = $query->fetch_array(MYSQLI_ASSOC);
            if($row['name'] == _POST['domain_name'])
                return -1;
        }
    }
    return 0;
}

Эта функция вызывает в другой функции, где мы передаем $domain_name


Ответы (1 шт):

Автор решения: Алексей Шиманский

Правильно @Jean-Claude подсказывает.

Вся работа сводится с одним именем домена к запросу вида:

SELECT COUNT(1) as cnt FROM black_list WHERE name = 'УКАЗАННЫЙ ДОМЕН';

И потом посмотреть значение cnt и вернуть результат. Типа return $cnt > 0


При сравнении всех доменов сразу вся работа сводится к этому:

  • Берём весь список доменов из запроса

    $domainNames = array_column($arrayFromRequest, 'domain_name');
    
  • Делаем запрос вида

    SELECT COUNT(1) as cnt FROM black_list WHERE name IN ('СПИСОК', 'ИМЁН', 'ЧЕРЕЗ', 'ЗАПЯТУЮ');
    
  • Смотрим значение cnt и возвращаем результат. Типа return $cnt > 0

→ Ссылка