Делимся секретами создания сайтов

Помогите со строками

Нужно из строки где будут записываться числа (1 2 573 99 33..) по запросу определить есть ли запрашиваемое число в этой строке. к примеру нужно проверить есть ли в этой строке число 33

Ответы: 13 → “Помогите со строками”

  1. Андрей Пуляев Ответить

    Есть такая функция в пхп, непомню сходу какая именно)) Я её юзал для айпишников. Она строку разбивает на массив по заданному сепоратору. Например по точке, наверное можно будет и по пробелу.. Потом уже будт легко по массиву бегать..
    Вспомнил)) $массив = explode("сепоратор",$строка);
    Почитай описание этой фукнции, возможно подойдёт.

  2. Виктор Патрушев Ответить

    Ну или RegExы использовать
    preg_match (" 33 ","1 2 573 99 33");

    Возвращает число, 1 или 0.

  3. Александр Сердюк Ответить

    А можно регуляркой:
    <?php
    $string = "1 2 573 99 33";
    $search = 33;
    if (preg_match("/\b".$search."\b/", $string))
    echo "Искомое число ".$search." <i>присутствует</i> в строке ".$string;
    else
    echo "<i>Нету</i> в строке ".$string." числа ".$search." :( ";
    ?>

  4. Александр Сердюк Ответить

    #3
    опередил :)
    Кстати, ваш вариант не сработает, т.к. строка заканчивается не на пробел.

  5. Рост Ханюков Ответить

    strpos надо использовать )

  6. Евгений Грик Ответить

    #3 – в начале/конце строки будет бажить
    #4 – верный вариант
    #6 – бред

  7. Рост Ханюков Ответить

    обьясните пожалуйста почему бред

  8. Александр Сердюк Ответить

    №8
    потому что помимо
    1 2 33 3
    может быть
    1 3233 2
    во втором варианте числа 33 нет, но strpos его найдет

  9. Виктор Патрушев Ответить

    Ну да, чет я ступил. Мне в голову засело, что \b – это граница строки, а не слова. Постоянно меня это подводит
    #7 – Ваш вариант самый полезный, люблю таких людей))

  10. Антон Хлыновский Ответить

    preg_match(~(^|\s)+33(\s|$)+~, $str);

    Или же, если доподлинно известно, что цифры разделяются пробелами и только пробелами,
    (strpos(" 33 ", " " . $str . " ") !== false)
    Не будем забывать, что strpos работает до 7 раз быстрее, чем preg_match.

  11. Андрей Кравчук Ответить

    #11
    Забыл про варианты когда нужное число будет в начале или конце строки. А так да, вариант с strpos будет максимально производителен.

  12. Алексей Сонькин Ответить

    #11
    тока аргументы в другом порядке) сначала где, потом что ищем…
    (strpos(" $str ", " 33 ")!==false)

  13. Антон Хлыновский Ответить

    #12:
    Специально для этого дописываем по одному пробелу в начале и в конце

    #13:
    Ч-черт.. Да, ты прав.

Ответить