За последние 24 часа нас посетили 38056 программистов и 1808 роботов. Сейчас ищут 820 программистов ...

in_array или array_search?

Тема в разделе "PHP для новичков", создана пользователем Mr. T, 28 мар 2011.

  1. Mr. T

    Mr. T Активный пользователь

    С нами с:
    10 ноя 2010
    Сообщения:
    733
    Симпатии:
    0
    Адрес:
    Украина, г. Киев
    Добрый вечер,
    ситуация:

    выполняю запрос к базе, в ответ получаю два поля, в которых содержаться цифры, нужно проверить наличие среди них одной цифры. Если использую in_array, то баян, если array_search, получается. С описания in_array понял, что для таких ситуаций нужно использовать ее, как быть?
     
  2. lorddexon

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

    С нами с:
    25 мар 2011
    Сообщения:
    5
    Симпатии:
    0
    array_search - ищет элемент в массиве, и если найден - выдает его индекс
    а in_array - проверяет, есть ли какая-то переменная в этом массиве и выдает true/false
     
  3. Mr. T

    Mr. T Активный пользователь

    С нами с:
    10 ноя 2010
    Сообщения:
    733
    Симпатии:
    0
    Адрес:
    Украина, г. Киев
    lorddexon,
    я в курсе, объясню по-другому:

    запрос вернул два столба (поля):
    - field1
    - field2

    данные примерно такие:

    field1 fiel2
    1 0
    1 3
    1 4
    2 5
    2 6

    Мне нужно проверить существование в массиве ($row = mysql_fecth_array ($result)) цифра, 1, к примеру. Как лучше быть?
     
  4. lorddexon

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

    С нами с:
    25 мар 2011
    Сообщения:
    5
    Симпатии:
    0
    Я бы использовал in_array
     
  5. Mr. T

    Mr. T Активный пользователь

    С нами с:
    10 ноя 2010
    Сообщения:
    733
    Симпатии:
    0
    Адрес:
    Украина, г. Киев
    Я сначала тоже использовал, но с in_array не работает, проверено.
     
  6. Volt(220)

    Volt(220) Активный пользователь

    С нами с:
    11 июн 2009
    Сообщения:
    1.640
    Симпатии:
    1
    PHP:
    1. <?php
    2. $i=1;
    3. while ($row = mysql_fecth_array ($result)){
    4.     if(in_array($i, $row){
    5.         tra-la-la($row);
    6.     }
    7. }
    И что не работает?
     
  7. Апельсин

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

    С нами с:
    20 мар 2010
    Сообщения:
    3.645
    Симпатии:
    2
    Volt(220)
    я вообще по-джейдайски проверяю if(isset($row[$i]))
    :)
     
  8. Apple

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

    С нами с:
    13 янв 2007
    Сообщения:
    4.984
    Симпатии:
    2
    До тех пор, пока тебе известен индекс, по которому можно найти значение.
    А если неизвестен? Джедайский способ рухнет.
     
  9. Dima4321

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

    С нами с:
    1 апр 2009
    Сообщения:
    683
    Симпатии:
    0
    Mr. T


    Посмотри что у тебя вообще в массиве

    print_r($row);

    а потом как тебе советовали, все должно работать.
     
  10. Gromo

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

    С нами с:
    24 май 2010
    Сообщения:
    2.786
    Симпатии:
    2
    Адрес:
    Ташкент
    Апельсин
    если впомнишь, джедайские фильмы начинаются "давным давно..." :)

    плохо пробовал. значит значение, которое подаёшь, действительно не имеется в массиве
     
  11. Апельсин

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

    С нами с:
    20 мар 2010
    Сообщения:
    3.645
    Симпатии:
    2
    Gromo
    Ога, и уползающий текст
    [​IMG]
     
  12. Mr. T

    Mr. T Активный пользователь

    С нами с:
    10 ноя 2010
    Сообщения:
    733
    Симпатии:
    0
    Адрес:
    Украина, г. Киев
    PHP:
    1. <?php
    2. $_GET['id'] = intval ($_GET['id']);
    3. $result = $db->query ('SQL-запрос');
    4. $num_rows = $db->num_rows ($result);
    5. for ($i = 0; $i < $num_rows; $i++) {
    6.     $row = $db->fetch_array ($result);
    7. }
    8. if (!in_array ($_GET['id'], $row)) die ('Hacking attempt!');
    9. ?>
    И что здесь, может быть, не так? :)
     
  13. Volt(220)

    Volt(220) Активный пользователь

    С нами с:
    11 июн 2009
    Сообщения:
    1.640
    Симпатии:
    1
    Mr. T
    То что $row содержит только последнюю строчку из результатов запроса.
     
  14. Mr. T

    Mr. T Активный пользователь

    С нами с:
    10 ноя 2010
    Сообщения:
    733
    Симпатии:
    0
    Адрес:
    Украина, г. Киев
    Уже понял, а как быть лучше тогда в такой ситуации?
     
  15. Volt(220)

    Volt(220) Активный пользователь

    С нами с:
    11 июн 2009
    Сообщения:
    1.640
    Симпатии:
    1
    Внести if в for.
     
  16. Mr. T

    Mr. T Активный пользователь

    С нами с:
    10 ноя 2010
    Сообщения:
    733
    Симпатии:
    0
    Адрес:
    Украина, г. Киев
    Уже пробовал но не помогает, что, кстати, логично, как и в случае, когда if был после for.
     
  17. Volt(220)

    Volt(220) Активный пользователь

    С нами с:
    11 июн 2009
    Сообщения:
    1.640
    Симпатии:
    1
    Тогда надо уточнить задачу.
    Подозреваю что можно заменить 6 строчку на что-то вроде:
    Код (Text):
    1.  $dbRow = $db->fetch_array ($result);
    2.  $row[]=$dbRow[id];
     
  18. Mr. T

    Mr. T Активный пользователь

    С нами с:
    10 ноя 2010
    Сообщения:
    733
    Симпатии:
    0
    Адрес:
    Украина, г. Киев
    У меня запросом два поля выбирается, нужно по ним осуществить поиск ID, если делать, как в последнем сообщение, то if внутри for не пройдет, нужно выносить, верно?
     
  19. Volt(220)

    Volt(220) Активный пользователь

    С нами с:
    11 июн 2009
    Сообщения:
    1.640
    Симпатии:
    1
    Я имел ввиду 6 строчку из
    PHP:
    1. <?php
    2.  $_GET['id'] = intval ($_GET['id']);
    3.  $result = $db->query ('SQL-запрос');
    4.  $num_rows = $db->num_rows ($result);
    5.  for ($i = 0; $i < $num_rows; $i++) {
    6.      $row = $db->fetch_array ($result);
    7.  }
    8.  if (!in_array ($_GET['id'], $row)) die ('Hacking attempt!');
    9.  ?>
    Если надо проверять оба поля то оба поля надо будет пихать в массив.
     
  20. Mr. T

    Mr. T Активный пользователь

    С нами с:
    10 ноя 2010
    Сообщения:
    733
    Симпатии:
    0
    Адрес:
    Украина, г. Киев
    Спасибо, разобрался.