multidimensional - php 5 strpos() diferencia entre devolver 0 y falso?
strtotime to date (5)
Personalmente tiendo a usar de esta manera:
if(!strpos($v,''ttp:''))$v=''http://''.$v;
o
if(strpos('' ''.$v,''http''))
para evitar la posición " 0
", entonces hágala siempre un número mayor que 0
aplausos
if(strpos("http://www.example.com","http://www.")==0){ // do work}
Espero que esto se resuelva como verdadero, y lo hace. Pero que pasa cuando lo hago.
if(strpos("abcdefghijklmnop","http://www.")==0){// do work}
Esto también pasa a php 5 porque, en la medida en que puedo trabajar, los strpos devuelven false, que se traduce como 0.
¿Es correcto el pensamiento / comportamiento? Si es así, ¿cuál es la solución para probar que una subcadena está al principio de otra cadena?
Sí, este es el comportamiento correcto / esperado:
-
strpos
puede devolver0
cuando hay una coincidencia al principio de la cadena - y devolverá
false
cuando no haya coincidencia
La cosa es que no debes usar ==
para comparar 0
y false
; Deberías usar ===
, así:
if(strpos("abcdefghijklmnop","http://www.") === 0) {
}
O
if(strpos("abcdefghijklmnop","http://www.") === false) {
}
Para obtener más información, consulte Operadores de comparación :
-
$a == $b
seráTRUE
si$a
es igual a$b
. -
$a === $b
seráTRUE
si$a
es igual a$b
, y son del mismo tipo .
Y, citando la página de manual de strpos
:
Esta función puede devolver
FALSE
booleano, pero también puede devolver un valor no booleano que se evalúa comoFALSE
, como0
o""
.
Por favor, lea la sección sobre Booleans para más información.
Utilice el operador===
para probar el valor de retorno de esta función.
strpos devuelve un int o un booleano falso. el operador == también evalúa 0 para indicar falso, usted quiere usar el operador === (tres signos iguales) que también verifica que los tipos que se comparan sean los mismos en lugar de solo ver si se pueden evaluar para que signifiquen lo mismo.
asi que
if (strpos($hastack, $needle) === 0)
{
// the $needle is found at position 0 in the $haystack
}
0
es un posible valor de retorno de strpos
cuando encuentra una coincidencia desde el principio. En caso de que si la coincidencia no se encuentra, devuelve false
(booleano). Por lo tanto, debe verificar el valor de retorno de strpos
usando el operador ===
que verifica el valor y el tipo en lugar de usar ==
que solo verifica el valor
===
y !==
comparan tipo y valor:
if (strpos("abcdefghijklmnop", "http://www.") !== false){// do work}