Подтвердить что ты не робот

Проверьте длину строки в 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, он по-прежнему возвращает первое сообщение, хотя строка больше 131.

Независимо от того, какое число я использую меньше 141, я всегда получаю "Нет конкурсов". вернулся ко мне.

4b9b3361

Ответ 1

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

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

Ответ 2

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

Ответ 3

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

Ответ 4

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

Ответ 5

Функция xpath() не возвращает строку. Он возвращает массив с элементами XML (типа SimpleXMLElement), который может быть преобразован в строку.

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.";
   }
}

Ответ 6

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

Ответ 7

Решение XPath заключается в использовании:

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

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

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