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
}
Как я могу это получить?






Вы можете извлечь $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')
да. Точно! Проверяет, содержится ли он в переменной. но только иногда я получаю десятичные дроби.
Хорошо, позвольте мне прояснить это. Иногда у вас есть imap subject = "code. 249 is your id", а иногда imap subject = "code. 249.00 is your id", где 249 находится в вашей переменной $id, это правильно?
да. Но дело в том, что когда есть пробел, десятичных знаков не будет. Когда нет места, будут десятичные дроби. Но в 95% случаев я получаю только тему как Code. $id is your id.
Там еще много чего еще в теме Code. $id is your id. Date: xx Time: xx Стоит ли добавлять Буквально?
Вам нужно только добавить столько, чтобы отличить ваш идентификатор 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 /, чтобы сделать его еще более понятным, но в данном случае это не обязательно.
Подводя итог: если часть code. $id is your id отображается только однажды во всей вашей строке, тогда нет: вам не нужно добавлять дополнительные строковые литералы :) Если это решает вашу проблему, подумайте о том, чтобы принять этот ответ.
Моя проблема будет легко решена, если я смогу ограничить выборку объекта imap. Как Upto Fetching первые два слова. Так что $ id будет точным.
Вам нужно будет точно знать, какой длины должен быть $id. Для 3-значного числа это нормально, но что, если id - 2-значное, 4-значное или целое число, состоящее из более цифр?
100% Конечно, не более 4-значного числа.
Одевают :)
Привет! Спасибо. Preg_match Ваш первый код работает. Но время выполнения немного медленнее по сравнению с strpos.
strpos вернет 0, потому что code находится в начале строки. 0 оценивается как ложь при использовании вольного сравнения, такого как !. Что вам нужно сделать, так это убедиться, что у него нет строгой оценки false:
if (strpos($headerInfo->subject, "code. $id") !== FALSE) {
echo true;
}
Это также извлекает другие целые числа, присутствующие в теме. Не только целые числа после Code. 11 is your id. time : 13:10.
@ kinger123 И что именно вы хотите делать с этими данными? Извлечь
115.00в переменную? Проверить, содержится ли он в переменной?