У меня есть строка длиной 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
ожидает строку .