Foros del Web » Programando para Internet » PHP »

in_array, no me funciona con file()

Estas en el tema de in_array, no me funciona con file() en el foro de PHP en Foros del Web. Hola, pues no lo entiendo la verdad he intentado lo siguiente: Código: $string = "palabra"; $lista = file("listado.txt"); if(in_array($string,$lista)) die("Se encuentra"); else die("No se encuentra"); ...
  #1 (permalink)  
Antiguo 26/08/2006, 14:57
 
Fecha de Ingreso: abril-2006
Mensajes: 56
Antigüedad: 11 años, 7 meses
Puntos: 0
in_array, no me funciona con file()

Hola, pues no lo entiendo la verdad he intentado lo siguiente:

Código:
$string = "palabra";
$lista = file("listado.txt");
if(in_array($string,$lista))
die("Se encuentra");
else
die("No se encuentra");
Dentro del .txt tengo varias palabras, las cuales se encuentran separadas linea por linea.. es decir que el array lo toma perfectamente. ya que si imprimo asi:

echo $lista[0]; //imprime bien la primer palabra y asi con las demas..

El caso es que al utilizar la funcion in_array() pues no encuentra la palabra buscada..y esta mal.. ya que si esta almacenada.

A que se debe??

Espero que puedan ayudarme.. la verdad me quede algo sorprendido, no entiendo por que no funciona.

Gracias.
  #2 (permalink)  
Antiguo 26/08/2006, 15:38
AlvaroG
Invitado
 
Mensajes: n/a
Puntos:
Hay un detalle que estás olvidando y que puede ser la causa de tu problema:

Cita:
Iniciado por www.php.net/file
Nota: Cada línea en la matriz resultante incluye el final de línea, así que aun necesita usar rtrim() si no quiere conservar el final de línea.
O sea, probá si te funciona el código sustituyendo $lista por rtrim($lista)


Saludos.
  #3 (permalink)  
Antiguo 26/08/2006, 16:06
 
Fecha de Ingreso: abril-2006
Mensajes: 56
Antigüedad: 11 años, 7 meses
Puntos: 0
Hola, gracias por responder :)

Pues he probado esa funcion y da el siguiente error:

Warning: in_array() [function.in-array]: Wrong datatype for second argument in...

Código PHP:
$string "palabra";
$lista file("listado.txt");
if(
in_array($string,rtrim($lista)))
die(
"Se encuentra");
else
die(
"No se encuentra"); 
Como vez, he agregado la funcion rtrim justo en el segundo argumento para ahorrar lineas.. y pues proboca el error que anteriormente mostre. :)

Nta: Recordar que dentro del txt. cada palabra la separo con un \n (linea por linea) cuya \n en el documento se transforman en pequeño recuadros, supongo que eso ya lo saben.

Alguna ayudita mas??

:( Gracias.
  #4 (permalink)  
Antiguo 26/08/2006, 17:11
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 11 años, 6 meses
Puntos: 2122
Alvin posteo la solucion correcta solo que debes de aplicar el rtrim o trim a cada palabra, lo que tu deberias de hacer es algo asi:
Código PHP:
$string "palabra";
$lista file("listado.txt");
foreach( 
$lista as $palabra ) {
      
$palabra trim$palabra );
      if( 
$palabra == $string ) {
           die( 
"Se encuentra" );
      }
}

die( 
"No se encuentra" ); 
  #5 (permalink)  
Antiguo 26/08/2006, 17:47
 
Fecha de Ingreso: abril-2006
Mensajes: 56
Antigüedad: 11 años, 7 meses
Puntos: 0
Hola Gator pues tienes razon y ahora mismo iba a responder el problema, ya que era porque los datos recuperados con file me dejaban un espacio en blanco al lado de cada palabra, por eso no coincidia. :(

Ahora tengo una consulta sobre esto, tu codigo lo entiendo a la perfeccion.. pero la pregunta es: Hay algo mas rapido?

Porque el loop ya lo habia pensado.. entonces me puse a buscar algo mas rapido y vi la funcion "in_array()" pero como habran visto me da algun que otro problem.. entonces si o si debo utilizar un loop o hay manera de que pueda funcionarme la funcion "in_array()" junto con file()?

Pues como puse antes.. tanto la funcion trim() como rtrim() lo utilizo y da error.. menos cuando saco los datos a fuera (como el ejemplo de gator) pero para buscar algo directamente dentro "in_array()", no.

Nta: Me gustaria ahorrar lineas..

Muchisimas Gracias a ambos!!

Última edición por rimon; 26/08/2006 a las 17:52
  #6 (permalink)  
Antiguo 26/08/2006, 19:11
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 11 años, 6 meses
Puntos: 2122
Hola pues de hecho in_array hace lo mismo un loop, claro es una funcion en C, mas rapida, pero en tu caso no hay mucho que hacer puesto que estas leyendo de un file, si buscas rapidez, lo que deberias de hacer es abrir el archivo y poco a poco leerlo hasta encontrar la palabra que buscas y en ese momento detenerte y cerrar el archivo. Esto es mas optimo y ocupa menos espacio.

Si tu file es muy muy grande, lo mas recomendable es usar entonces una base de datos para que el sistema sea mucho mas rapido.
  #7 (permalink)  
Antiguo 26/08/2006, 19:23
 
Fecha de Ingreso: enero-2006
Ubicación: Buenos Aires, Argentina
Mensajes: 299
Antigüedad: 11 años, 11 meses
Puntos: 5
Buenas, si querés usar in_array, no podrías hacer esto?

Código PHP:
$string "palabra";
$lista file("listado.txt");
if(
in_array($string "\n" ,$lista))
die(
"Se encuentra");
else
die(
"No se encuentra"); 
No lo probé pero si cada string tiene un salto, se me ocurre que debería funcionar...

Suerte
Califa
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 04:18.