valor multidimensional day buscar array php strpos

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 devolver 0 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 como FALSE , como 0 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}