Foros del Web » Programando para Internet » PHP »

Crear arreglo con explode

Estas en el tema de Crear arreglo con explode en el foro de PHP en Foros del Web. Tengo un problema y no sé si es de lógica. Tengo el siguiente archivo login1|password1|login1.cfg|razonsocial1 login2|password2|login2.cfg|razonsocial2 login3|password3|login3.cfg|razonsocial3 login4|password4|login4.cfg|razonsocial4 login5|password5|login5.cfg|razonsocial5 Entonces creo un arreglo con file ...
  #1 (permalink)  
Antiguo 21/02/2005, 19:15
Avatar de Koveart
Colaborador
 
Fecha de Ingreso: julio-2002
Ubicación: Colombia
Mensajes: 4.407
Antigüedad: 15 años, 4 meses
Puntos: 29
Crear arreglo con explode

Tengo un problema y no sé si es de lógica. Tengo el siguiente archivo

login1|password1|login1.cfg|razonsocial1
login2|password2|login2.cfg|razonsocial2
login3|password3|login3.cfg|razonsocial3
login4|password4|login4.cfg|razonsocial4
login5|password5|login5.cfg|razonsocial5

Entonces creo un arreglo con file y el nombre del archivo pero lo que quiero es crear un array unidimensional para poder trabajar con él.

Así que lo primero que hago es:

$archivo=file("usuarios.txt");

Con esto tengo un arreglo donde cada elemento es una línea. El problema es que quiero separar cada elemento con explode asi

$archivo1=explode("|",archivo);

Pero solamente me guarda el contenido de la última línea, eso si, en un arreglo separado por cada |.

$archivo1[0]=login5
$archivo1[1]=password5
$archivo1[2]=login5.cfg
$archivo1[3]=razonsocial5

Es decir que me va sobreescribiendo cada campo de $archivo1 y es te es el problema.

Cualquier sugerencia sería de utilidad.

Saludos
__________________
“Los soñadores no existen, se lo dice un soñador que ha tenido el privilegio de ver realidades que ni siquiera fue capaz de soñar”
  #2 (permalink)  
Antiguo 21/02/2005, 19:47
Avatar de jpinedo
Colaborador
 
Fecha de Ingreso: septiembre-2003
Ubicación: Lima, Perú
Mensajes: 3.120
Antigüedad: 14 años, 2 meses
Puntos: 41
Puedes utilizar un foreach para recorrer el primer array línea por línea.
Código PHP:
$lineas file("usuarios.txt");
$registro = array();
foreach(
$lineas as $linea){
   
$registro[] = explode("|"$linea);

Así, al final tendrás un array bidimensional, donde el primer índice es el número de línea y el segundo el índice de campo.
Código PHP:
echo $registro[3][2]; // imprimirá login3.cfg 
Saludos
  #3 (permalink)  
Antiguo 21/02/2005, 19:51
 
Fecha de Ingreso: febrero-2005
Mensajes: 670
Antigüedad: 12 años, 10 meses
Puntos: 0
El problema es que no podés hacerle un explode a un arrray.
Código PHP:
$archivo1=explode("|",$archivo
Hacé un bucle foreach que vaya leyendo cada elemento del array y genere un nuevo array.

Suerte
Fede

EDIT: uff, siempre que respondo alguien me gana por unos segundos =P
__________________
Federico H. García
Desarrollo Web
www.federicog.com.ar

Última edición por thunder.scripts; 21/02/2005 a las 19:52 Razón: soy lento ¬¬
  #4 (permalink)  
Antiguo 21/02/2005, 19:52
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
Eso es asì por què no recorres lo que file() te entrega que es un array .. de esa forma lo que tendràs que generar es un array bidimensional tipo

$datos['campo1'][0]
$datos['campoN'][0]

$datos['campo1'][1]
$datos['campoN'][1]

$datos['campo1'][N]
$datos['campoN'][N]

Podrìas generar dicho array bidimensional tipo:

Código PHP:
$archivo=file("blabla.txt");
$n=0;
foreach (
$archivo as $registro){
$campo=explode("|",$registro);
$datos['campo1'][$n]=$campo[0];
$datos['campo2'][$n]=$campo[1];
// etc

$n++;

Pero para todo esto ya tienes las funciones como fgetcsv() y afines para leer ese tipo de archivos con esa estructura sin tanto explode() ...

http://www.php.net/manual/en/function.fgetcsv.php

Un saludo,

Última edición por Cluster; 21/02/2005 a las 20:03
  #5 (permalink)  
Antiguo 21/02/2005, 20:03
Avatar de jpinedo
Colaborador
 
Fecha de Ingreso: septiembre-2003
Ubicación: Lima, Perú
Mensajes: 3.120
Antigüedad: 14 años, 2 meses
Puntos: 41
Aunque no siempre es necesario hacer esto (generar un tremendo array bidimensional)... pues si lo que quieres es hacer una autentificación del usuario o una búsqueda, lo puedes hacer directamente en el foreach:
De esa manera la ejecución del foreach termina al encontrar lo que buscas y no tendrá que recorrer todas las líneas necesariamente.
Código PHP:
// supongamos que sólo queremos los datos del usuario que tiene como login = "login3"
$lineas file("usuarios.txt");
$registro = array();
foreach(
$lineas as $linea){
   
$registro explode("|"$linea);
   if(
$registro[0] == "login3")break;
}
// Y $registro ya será un array unidimensional con los datos del usuario buscado.
// O un array vacío si no se encontró.
if(empty($registro)){
   echo 
"No se encontró el usuario";
}else{
   echo 
"usuario encontrado<br />\n";
   echo 
"login :".$registro[0]."<br />\n";
   echo 
"password :".$registro[1]."<br />\n";
   echo 
"cfg :".$registro[2]."<br />\n";
   echo 
"razón social :".$registro[3]."<br />\n";

Saludos
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 21:18.