За последние 24 часа нас посетили 30544 программиста и 1800 роботов. Сейчас ищут 927 программистов ...

Как сделать, чтобы хоть по одному было совпадение.

Тема в разделе "Прочие вопросы по PHP", создана пользователем macik, 27 окт 2006.

  1. macik

    macik Активный пользователь

    С нами с:
    14 июл 2006
    Сообщения:
    71
    Симпатии:
    0
    Есть array $test, в нем допустим 10 разных значений, мне надо проверить переменную $post, чтобы она соответствовала хотя бы одному значению. Подскажите как это правильно и быстро сделать (быстро в плане не так накладно, чтобы было для системы).
    P.S.
    Значений может быть и 100, и это текст до 20 символов.
     
  2. 440Hz

    440Hz Старожил
    Команда форума Модератор

    С нами с:
    21 дек 2012
    Сообщения:
    8.003
    Симпатии:
    1
    Адрес:
    Оттуда
    macik

    if(isset($test[$_POST['post']])) print('BINGO!');
     
  3. topas

    topas Активный пользователь

    С нами с:
    16 авг 2006
    Сообщения:
    2.258
    Симпатии:
    36
    PHP:
    1. <?php
    2. $array1 = array("a" => "green", "red", "blue", "red");
    3. $array2 = array("b" => "green", "yellow", "red");
    4. $result = array_diff($array1, $array2);
    5.  
    6. print_r($result);
    7. ?>
     
  4. Петр

    Петр Активный пользователь

    С нами с:
    20 мар 2006
    Сообщения:
    1.253
    Симпатии:
    0
    Адрес:
    Центр Вселенной
    Как вариант:
    PHP:
    1. <?php
    2. foreach ($test as $val)
    3. {
    4.     if ($val == $post)
    5.         echo "Есть контакт.";
    6. }
    7. ?>
     
  5. macik

    macik Активный пользователь

    С нами с:
    14 июл 2006
    Сообщения:
    71
    Симпатии:
    0
    Петр topas 440hz
    и какое из ваших предложений лучшее?
     
  6. topas

    topas Активный пользователь

    С нами с:
    16 авг 2006
    Сообщения:
    2.258
    Симпатии:
    36
    macik, сформулируйте вопрос пожалуйста еще раз... кажется его поняли по-разному

    ... на примере :)
     
  7. macik

    macik Активный пользователь

    С нами с:
    14 июл 2006
    Сообщения:
    71
    Симпатии:
    0
    Попробую еще раз:
    Вот небольшой пример
    я получаю переменную
    PHP:
    1. $_POST["table_name"];
    2. // мне ее надо проверить на совпадение
    3. mysql_connect("localhost", "root", "");
    4. $result = @mysql_list_tables("admin");
    5. $num_rows =@mysql_num_rows($result);
    6. for ($i = 0; $i < $num_rows; $i++) {
    7.    $table_name_bd[$i] = @mysql_tablename($result, $i);  // вот этого хотя бы одно совпадение
    8. }
    9.  
    10. // я так понимаю что вот этот вариант правильный
    11. foreach ($table_name_db as $val)
    12. {
    13.         if ($val == $_POST["table_name"])
    14.                 echo "Все ок";
    15. }else{
    16.     echo "eroor!!";
    17. }
    18.  
    Но будет ли оно правильно работать (быстро), сами понимаете таблиц может быть и сотня и две.
     
  8. topas

    topas Активный пользователь

    С нами с:
    16 авг 2006
    Сообщения:
    2.258
    Симпатии:
    36
    Меняешь строчку
    Код (Text):
    1. $table_name_bd[$i] = @mysql_tablename($result, $i);  // вот этого хотя бы одно совпадение
    на
    Код (Text):
    1. $table_name_bd[ @mysql_tablename($result, $i)] = 1;  // вот этого хотя бы одно совпадение
    а затем проверяешь
    Код (Text):
    1. if (isset($table_name[$_POST['table_name']]) ...
    Это как второй вариант к пример... замеряешь время первым, вторым, ..., сотым способом и сравниваешь какой быстрее :)
     
  9. macik

    macik Активный пользователь

    С нами с:
    14 июл 2006
    Сообщения:
    71
    Симпатии:
    0
    ну чуть я выше написал неправильно код ... по поводу вывода ошибки ...
    ну сам смысл наверно ясен...
     
  10. topas

    topas Активный пользователь

    С нами с:
    16 авг 2006
    Сообщения:
    2.258
    Симпатии:
    36
    macik
    кому ясен? ;)
     
  11. Mavir

    Mavir Guest

    На счет цикла не беспокойся, он быстро пройдет и сотню и две.

    Хотя весь цикл можно заменить одним условием.
    PHP:
    1. <?
    2. if (in_array($_POST['table_name'], $table_name_db )){
    3. // ok
    4. }
    5. ?>
    Только это будет чуть медленее, чем вариант topas

    А вообще, есть в MySQL такой запрос
    Код (Text):
    1. SHOW TABLES LIKE 'шаблон'
     
  12. macik

    macik Активный пользователь

    С нами с:
    14 июл 2006
    Сообщения:
    71
    Симпатии:
    0
    А подробно можно ...
     
  13. Davil

    Davil Guest

  14. Davil

    Davil Guest