2011-04-06 335 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的字符串長度。