Comunidad de diseño web y desarrollo en internet online

Buscar palabra dentro array php

Citar            
MensajeEscrito el 03 Ago 2011 10:40 am
Muy buenas!
La situación es que tengo el siguiente código que me abre un archivo .csv lo traslada a una array e imprime en pantalla los elementos de dicha array :

<?php

//Definimos matriz
$csv_matriz=array();
//Separador del fichero CSV
$separador = ";";
//Fichero a Leer
$handle = fopen("Book2.csv", "r");
//Inicializacion de Fila
$row=1;
//Mientras no sea Fin Fichero - Leemos el fichero y lo almacenamos en Matriz
while (($data = fgetcsv($handle, 30000, $separador)) !== FALSE)
{
$csv_matriz[] = $data;
}
//Cerramos Fichero
fclose($handle);

for ($i=0;$i<count($csv_matriz);$i++)
{
for ($j=0;$j<count($csv_matriz[$i]);$j++)
{
echo $csv_matriz[$i][$J].'|';
}
echo "<br/><br/>";
echo "************************************************* **";
echo "<br/><br/>";

}



?>



Bien lo que quiero conseguir es que usando una palabra que venga desde un formulario y sea recogida por un $REQUESTmismo, me la compare o busque dentro de la matriz y me diga en que fila y columna se encuentra.

La cuestión es que si en la linea: echo $csv_matriz[$i][$J].'|';
sustituyo las variables $i e $j por ejemplo por 2,3 y me imprime en pantalla la palabra que se encuentra en la fila 2 columna 3 del array.

Como podría modificar el código? Tendría que jugar con la variable $csv_matriz?
Alguna idea?

Gracias de antemano

Por pinakle

13 de clabLevel



 

chrome
Citar            
MensajeEscrito el 03 Ago 2011 12:34 pm
Dentro del for interno (el de la variable J), y suponiendo que la cadena a buscar esté en la variable $cad:

Código PHP :

if (strpos($csv_matriz[$i][$J],$cad)) {
   echo "Palabra encontrada en ".$i." ".$j."<br />";
}

Por DriverOp

Claber

2510 de clabLevel



 

opera
Citar            
MensajeEscrito el 03 Ago 2011 02:18 pm
Muchas gracias por responder.

tengo el codigo del form para ingresar la palabra a buscar :


<form name="datos" action="buscar2.php" method="POST" target="_blank">
Escribe tu nombre: <input type="text" name="nombre"><br>
<input type="submit" value="enviar formulario"><br>
<input type="reset" value="borrar">
</form>


Luego la pagina buscar2.php que contiene el código en cuestión.He implementado tu código con el que ya tenia pero algo falla.Si me pudieras guiar en que debería modificar te lo agradecería mucho.

buscar2.php:

<?php

//Definimos matriz
$csv_matriz=array();
//Separador del fichero CSV
$separador = ";";
//Fichero a Leer
$handle = fopen("Book2.csv", "r");
//Inicializacion de Fila
$row=1;
//Mientras no sea Fin Fichero - Leemos el fichero y lo almacenamos en Matriz
while (($data = fgetcsv($handle, 30000, $separador)) !== FALSE)
{
$csv_matriz[] = $data;
}
//Cerramos Fichero
fclose($handle);


$cad = $_REQUEST["nombre"];

for ($i=0;$i<count($csv_matriz);$i++)
{
for ($j=0;$j<count($csv_matriz[$i]);$j++)
{
if (strpos($csv_matriz[$i][$j],$cad)) {
echo "Palabra encontrada en ".$i." ".$j."<br />";
}
}

}


?>

Por pinakle

13 de clabLevel



 

chrome
Citar            
MensajeEscrito el 03 Ago 2011 04:44 pm
Si fueras tan amable de decirnos qué es lo que falla...

Lo que sí puedo decirte es que esta línea:

Código PHP :

$cad = $_REQUEST["nombre"];


debería ser

Código PHP :

$cad = $_POST["nombre"];


Además acabas de confirmar que eres de los que simplemente copia y pega código sin siquiera entender lo que el código hace. No esperes que te tomen muy en serio si sigues haciendo eso.

Por DriverOp

Claber

2510 de clabLevel



 

opera
Citar            
MensajeEscrito el 04 Ago 2011 01:25 pm
Gracias.

Es cierto que soy novato en php y autodidacta. Es por eso que a veces recorro a vosotros para alguna ayuda. Siempre intento averiguar que es y como funciona el código pues ya e implementado algunos de acuerdo con el proyecto web que estoy haciendo. El código pegado es el código "madre" para después implementarlo según necesidades. Probaré a ver si me puedo salir ya que al ir a buscar2.php no imprime en pantalla nada.

Gracias

Por pinakle

13 de clabLevel



 

chrome
Citar            
MensajeEscrito el 04 Ago 2011 04:22 pm
Probablemente porque la cadena que estás buscando no fue encontrada...

Por DriverOp

Claber

2510 de clabLevel



 

opera
Citar            
MensajeEscrito el 07 Ago 2011 07:29 pm
He estado probando varias cosas pero alfo falla pues la palabra a buscar existe seguro en el array. Seguiré probando.

Gracias

Por pinakle

13 de clabLevel



 

chrome
Citar            
MensajeEscrito el 07 Ago 2011 09:57 pm
si leiste el manual de la funcion dice que tienes que especificar que se distinto de falso

Código PHP :

if (strpos($csv_matriz[$i][$j],$cad) !== false)

ya strpos te puede devolver 0, y php lo interpreta como false por eso tienes que ponerlo explicitamente
ahora usa la funcion stripos para que o haga distincion entre mayusculas y minusculas

Código PHP :

if (stripos($csv_matriz[$i][$j],$cad) !== false)

a tambie recuerda las codificaciones si es que llevan acentos y Ñ`s ya que la codificacion causa problemas para esas letras

Por tuadmin

Claber

598 de clabLevel



Genero:Masculino  

firefox
Citar            
MensajeEscrito el 10 Ago 2011 07:38 pm
array_search( $string, $array );

Busca dentro de los valores de un array

Por This-is-Purgatory

40 de clabLevel



Genero:Masculino  

chrome
Citar            
MensajeEscrito el 11 Ago 2011 07:49 am
No creo que sea conveniente usar usar un archivo .csv, debes tener encuenta que php lo procesara en cada llamada, seria mejor si usaras sqlite.

Primero debes importar los datos csv a sqlite:
*nescecitas el cliente para consola sqlite3, lo descargas de la pagina de sqlite.

luego pones en la terminal o consola cmd(en windows):
sqlite3 nombre_de_la_db
aparacera esto:
sqlite>

creas la tabla:
suponiendo q el archivo csv tenga el formato: nombre, otro valor
sqlite> CREATE TABLE nombre_de_la_tabla(nombre varchar(255) not null, otro_valor varchar(255) not null);

importas el csv a la tabla:
sqlite> .mode csv
sqlite> .import ./archivo_csv.csv nombre_de_la_tabla

pruebas que halla funcionado y sales de sqlite:
sqlite> SELECT * FROM nombre_de_la_tabla;
sqlite> .quit

Ahora en php:
<?php

// sqlite_escape_string, es para evitart la injeccion sql
$cad = sqlite_escape_string($_POST["nombre"]);

// abres la base de datos
$db = sqlite_open('nombre_de_la_db') or die('No puedo abrir la base de datos');

// buscas en la tabla
$resultado = sqlite_array_query($db, "SELECT otro_valor FROM nombre_de_la_tabla WHERE nombre='$cad'", SQLITE_ASSOC);

sqlite_close($db);

// compruebas el resultado
if(count($resultado) > 0)
{
foreach($resultado as &$r) { echo "$r \n"; }
unset($r);

} else { echo "no se encontraron resultados"; }

?>

saludos, espero que le sea util.

Por pablon

38 de clabLevel



Genero:Masculino  

Conozco a un grupo de personas que resuelve cualquier tipo de problema.

firefox

 

Cristalab BabyBlue v4 + V4 © 2011 Cristalab
Powered by ClabEngines v4, HTML5, love and ponies.