2011-04-06 14 views
28

Tengo una cadena que tiene 141 caracteres de longitud. Usando el siguiente código tengo una sentencia if para devolver un mensaje si la cadena es mayor o menor que 140.Comprobar longitud de cadena En 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."; 
} 

Solía ​​var_dump el mensaje $ y se nota la cadena es [0]=> string(141) aquí es mi problema. Cuando cambio los números para la instrucción if a < 130 y> 131, todavía devuelve el primer mensaje aunque la cadena es mayor que 131. No importa qué número use menos de 141 siempre obtengo "No hay concursos". devuelto a mí

+1

Esto no se trata de XPath, sino de lógica simple. –

Respuesta

61

intenta la sintaxis común en su lugar:

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

Un 'interruptor' en' strlen ($ mensaje) 'sería aún más rápido ... –

10

[0]=> string(141) significa $ mensaje es una matriz por lo que debe hacer strlen($message[0]) < 141 ...

4

[0]=> string(141) significa que el mensaje $ es una matriz, no cuerda, y el mensaje $ [0] es una cadena con 141 caracteres de longitud

3

$message no es una cadena, pero una matriz. Use $message[0] para acceder al primer elemento.

3

xpath no devuelve una cadena. Devuelve una matriz con elementos xml, que pueden transferirse a la cadena.

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

Estoy rodando un array a string, obtendrá la palabra 'Array', que es lo que ya está ocurriendo implícitamente en la publicación del OP (ya que 'strlen()' espera una cadena). 'Array' siempre es más corto que los caracteres '141'. – pinkgothic

+0

Vaya ... Ya casi estaba allí, solucioné esto ... gracias – Evert

1

Debido $xml->xpath siempre devuelven un conjunto , strlen espera una cadena de .

1

solución Un XPath es utilizar:

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

donde $ k debe ser sustituido por un número.

Esto evalúa la longitud de cadena de $ k-th (en orden de documento) div en el documento XML que tiene un atributo class con el valor 'contest'.

Cuestiones relacionadas