Проверьте длину строки в PHP - PullRequest
32 голосов
/ 06 апреля 2011

У меня есть строка длиной 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, я всегда получаю «Нет конкурсов».вернулся ко мне.

Ответы [ 7 ]

73 голосов
/ 06 апреля 2011

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

if (strlen($message)<140) {
    echo "less than 140";
}
else
    if (strlen($message)>140) {
        echo "more than 140";
    }
    else {
        echo "exactly 140";
    }
10 голосов
/ 06 апреля 2011

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

4 голосов
/ 06 апреля 2011

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

3 голосов
/ 06 апреля 2011

Функция 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.";
   }
}
3 голосов
/ 06 апреля 2011

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

1 голос
/ 06 апреля 2011

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

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

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

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

1 голос
/ 06 апреля 2011

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...