PHP - strpos () с пробелом

imap subject = "code. 115 is your id"

Я пробовал использовать один ниже, но не работал.

$headerInfo = imap_headerinfo($connection);
if (!strpos($headerInfo->subject, "code. $id")) {
    echo true 
}

$headerInfo = imap_headerinfo($connection);
if (!strpos($headerInfo->subject, "code.$id")) {
    echo true 
}

Как я могу это получить?

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
1
0
265
2

Ответы 2

Вы можете извлечь $id, используя регулярное выражение capture group.

<?php
$id = getId('imap subject = "code. 115 is your id"'); // is 115
$id = getId('imap subject = "code.115.00 is your id"'); // is 115

function getId($subject) {
    $r = [];
    if (preg_match("/code\. ?([0-9]+)(\.00)? is your id/", $subject, $r)) {
        return $r[1];
    }
    else {
        throw new Exception("Couldn't match subject");
    }
}

Теперь вам нужно только проверить, является ли этот $id вашим идентификатором :)

$id = getId($headerInfo->subject);
if ($id == '119')

@ kinger123 И что именно вы хотите делать с этими данными? Извлечь 115.00 в переменную? Проверить, содержится ли он в переменной?

Danon 09.08.2018 15:27

да. Точно! Проверяет, содержится ли он в переменной. но только иногда я получаю десятичные дроби.

kinger123 09.08.2018 15:31

Хорошо, позвольте мне прояснить это. Иногда у вас есть imap subject = "code. 249 is your id", а иногда imap subject = "code. 249.00 is your id", где 249 находится в вашей переменной $id, это правильно?

Danon 09.08.2018 15:34

да. Но дело в том, что когда есть пробел, десятичных знаков не будет. Когда нет места, будут десятичные дроби. Но в 95% случаев я получаю только тему как Code. $id is your id.

kinger123 09.08.2018 15:46

Там еще много чего еще в теме Code. $id is your id. Date: xx Time: xx Стоит ли добавлять Буквально?

kinger123 09.08.2018 15:58

Вам нужно только добавить столько, чтобы отличить ваш идентификатор 115 от других номеров. Например, если ваша строка выглядит как I'm 19 years old and have 192cm, то шаблон /[0-9]+/ будет соответствовать как 19, так и 192 по вашему возрасту. Итак, мы окружаем его /I'm [0-9]+ years/, чтобы прояснить, что нам нужен номер тот, а не другой. Я мог бы также добавить /I'm [0-9]+ years old and have /, чтобы сделать его еще более понятным, но в данном случае это не обязательно.

Danon 09.08.2018 16:02

Подводя итог: если часть code. $id is your id отображается только однажды во всей вашей строке, тогда нет: вам не нужно добавлять дополнительные строковые литералы :) Если это решает вашу проблему, подумайте о том, чтобы принять этот ответ.

Danon 09.08.2018 16:04

Моя проблема будет легко решена, если я смогу ограничить выборку объекта imap. Как Upto Fetching первые два слова. Так что $ id будет точным.

kinger123 09.08.2018 16:06

Вам нужно будет точно знать, какой длины должен быть $id. Для 3-значного числа это нормально, но что, если id - 2-значное, 4-значное или целое число, состоящее из более цифр?

Danon 09.08.2018 16:11

100% Конечно, не более 4-значного числа.

kinger123 09.08.2018 16:18

Одевают :)

Danon 09.08.2018 16:32

Привет! Спасибо. Preg_match Ваш первый код работает. Но время выполнения немного медленнее по сравнению с strpos.

kinger123 09.08.2018 16:52

strpos вернет 0, потому что code находится в начале строки. 0 оценивается как ложь при использовании вольного сравнения, такого как !. Что вам нужно сделать, так это убедиться, что у него нет строгой оценки false:

if (strpos($headerInfo->subject, "code. $id") !== FALSE) {
    echo true;
}

Это также извлекает другие целые числа, присутствующие в теме. Не только целые числа после Code. 11 is your id. time : 13:10.

kinger123 09.08.2018 16:25

Другие вопросы по теме