2011-04-06 159 views
28

我有一个长度为141个字符的字符串。使用下面的代码我有一个if语句返回一个消息,如果字符串是大于或小于140在PHP中检查字符串长度

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在$消息,它显示的字符串是[0]=> string(141)这里是我的问题。当我将if语句的数字更改为< 130和> 131时,尽管字符串大于131,它仍然会返回第1条消息。无论我使用的数字少于141,我总是会得到“没有比赛”。回到我身边。

+1

这不是关于XPath,而是简单的逻辑。 – 2011-04-06 17:37:26

回答

61

尝试共同语法来代替:

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

对'的strlen($消息)一个''之开关将会更快还是...... – 2015-04-27 17:22:52

10

[0]=> string(141)装置$消息是一个数组,所以你应该做strlen($message[0]) < 141 ...

4

[0]=> string(141)意味着$消息是一个数组,不串,和$消息[0]是与长度

141个字符的字符串
3

$message显然不是一个字符串,而是一个数组。使用$message[0]访问第一个元素。

3

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

我相当rue铸造一个数组字符串会得到你'单词'这个词,这是已经隐含在OP的职位(因为'strlen()'期待一个字符串)发生了什么。 '数组'总是比'141'字符短。 – pinkgothic 2011-04-06 08:07:31

+0

哎呦。我几乎没有,修正了这个..谢谢 – Evert 2011-04-06 08:51:13

1

$xml->xpath因为总是返回一个阵列strlen期望一个

1

一个XPath解决方案是使用

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

其中$ķ应该由多个取代。

这将求值为具有值为'contest'的class属性的XML文档中的$ k-th(按文档顺序)div的字符串长度。