Проверка длины строки в PHP

У меня есть строка длиной 141 символ. Используя следующий код, у меня есть оператор if, чтобы вернуть сообщение, если строка больше или меньше 140.

libxml_use_internal_errors(TRUE); $dom = new DOMDocument(); $dom->loadHTMLFile($source); $xml = simplexml_import_dom($dom); libxml_use_internal_errors(FALSE); $message = $xml->xpath("//div[@class='contest']"); if (strlen($message) < 141) { echo "There Are No Contests."; } elseif(strlen($message) > 142) { echo "There is One Active Contest."; } 

Я использовал var_dump в $ message, и он показывает, что строка [0]=> string(141) вот моя проблема. Когда я изменяю числа для оператора if на <130 и> 131, он все равно возвращает 1-е сообщение, хотя строка больше 131. Независимо от того, какое число я использую менее 141, я всегда получаю «Нет конкурсов». вернулся ко мне.

вместо этого попробуйте общий синтаксис:

 if (strlen($message)<140) { echo "less than 140"; } else if (strlen($message)>140) { echo "more than 140"; } else { echo "exactly 140"; } 

[0]=> string(141) означает, что $ message – массив, поэтому вы должны сделать strlen($message[0]) < 141

[0]=> string(141) означает, что $ message – это массив, а не строка, а $ message [0] – строка длиной 141 символ

$message – возможно не строка, а массив. Используйте $message[0] для доступа к первому элементу.

xpath не возвращает строку. Он возвращает массив с элементами xml, которые могут быть отправлены в строку.

 if (count($message)) { if (strlen((string)$message[0]) < 141) { echo "There Are No Contests."; } else if(strlen((string)$message[0]) > 142) { echo "There is One Active Contest."; } } 

Решение XPath должно использовать :

 string-length((//div[@class='contest'])[$k]) 

где $ k следует заменить числом.

Это оценивает длину строки $ k-th (в порядке документа) div в XML-документе, который имеет атрибут class со значением «конкурс».

Поскольку $xml->xpath всегда возвращает массив , strlen ожидает строку .