Условный sql на основе содержимого строки

#php #foreach

#php #foreach

Вопрос:

Как определить URL-адрес изображения, который, если ссылка содержит слова ads ad , затем передать insert в базу данных. Затем это должно быть вставлено в первые данные и передано вторым. Спасибо,

PHP-КОД

 foreach($data['image'] as $item) {
  $title = $item['title'];
  $image = $item['image_url'];
  mysql_query("SET NAMES utf8");
 mysql_query("INSERT INTO article (title, image) VALUES ('".$title."', '".$image."')");
}
  

ДЕРЕВО JSON

 {
    "image": [
        {
            "title": "the big lake",
            "image_url": "http://localhost/json/image/the_big_lake.jpg"
        },
        {
            "title": "Nike Air",
            "image_url": "http://localhost/json/image/12087689_ads.jpg"
        }
    ]
}
  

Комментарии:

1. Ваш вопрос плохо сформулирован. Я понимаю, что вы хотите обнаружить строку «ad» в image_url ключе, но я не отслеживаю, что вы хотите сделать, когда такое условие выполнено.

2. @Chris, могу ли я использовать if(preg_match) , чтобы сначала составить мнение?

3. Я понимаю, что вам нужно условие (не «судить»), но я не уверен, что вы хотите делать, если условие истинно. Итак, если в имени файла есть строка «ad»… что делать? Вставить это? Не вставлять это?

Ответ №1:

Я предположу, что вы хотите вставить все изображения, у которых нет «ad» в URL-адресе изображения … если вам нужна ТОЛЬКО реклама, измените === в операторе if на !== . Убедитесь, что оно содержит либо тройное равенство, либо восклицательное значение double equals.

Также обратите внимание, что это не очень надежный метод — что, если бы изображение было вызвано «my_dad_and_mom.jpg «. Он содержит «ad», но не является рекламой.

 foreach($data['image'] as $item) {
  if (strpos($item['image_url'], 'ad') === false) {
    mysql_query("SET NAMES utf8"); // not sure why this is needed....
    mysql_query("INSERT INTO article (title, image) VALUES ('".$item['title']."', '".$item['image_url']."')");
  }
}
  

РЕДАКТИРОВАТЬ: Это вроде как быстро и грязно…

     $forbidden_words = array(
        'ads',
        'ad',
        'sex',
        'xxx'
    );
    function str_in_array($str, $array) {
        foreach ($array as $token) {
            if (stristr($str, $token) !== FALSE)
                return true;
        }
        return false;
    }
foreach($data['image'] as $item) {
  if (str_in_array($item['image_url'], $forbidden_words) === false) {
    mysql_query("SET NAMES utf8"); // not sure why this is needed....
    mysql_query("INSERT INTO article (title, image) VALUES ('".$item['title']."', '".$item['image_url']."')");
  }
}
  

Комментарии:

1. Добавлен массив запрещенных слов и функция для проверки

Ответ №2:

нравится это?

 foreach($data['image'] as $item) {
  $title = $item['title'];
  $image = $item['image_url'];
  if(preg_match('/ad/',$image){
    mysql_query("SET NAMES utf8");
    mysql_query("INSERT INTO article (title, image) VALUES ('".$title."', '".$image."')");
  }
}
  

Комментарии:

1. это должно быть if(!preg_match('/ad/',$image)){

2. «судите по URL изображения, что если ссылка содержит слова ads ad, то передайте insert в базу данных» звучит так, как будто он хотел по-другому, хотя это имеет гораздо больше смысла;)

3. Я знаю, что preg_match допускает совпадение только с одним словом. но Крис решает это с помощью функции.

4. вы также изначально просили что-то, что исключало бы ‘ad’ и ‘ads’ … в любом случае было бы найдено слово ‘ad’… но у Криса есть более надежный ответ