Bueno hace unos dias me pude a desarrollar una función que se encargue de cargar datos de un archivo txt a un array multidimensional.
Esto lo deje en etapa inicial pero te servira para lo que deseas.
Te explicare paso a paso como incorporarlo a tu sistema y asi poder usarlo entendiendo la ideologia que pense yo. No esta super depurado pero funciona ya e realizados pruebas y a trabajado.
Comenzemos:
1- Crea un archivo llamado datatext_function.php y agregale adentro estos codigos:
Código PHP:
<?php
function datatext_start($dt_archivo){
global $char_campo,$char_texto,$char_divisor;
if(file_exists($dt_archivo)){
$datafile = file($dt_archivo,"r");
$lineas = $datafile[0];
$campos = explode($char_divisor,$lineas);
# aqui se recorre la primera linea del archivo
# y se crean los campos que estaran disponibles
foreach($campos as $n_campo) {
$n_campo = eregi_replace($char_campo,"",$n_campo);
agregar_campo($n_campo);
}
# aqui se recorre el file para agregar los datos.
for($i=1;$i<count($datafile);$i++){
$dt_data = explode($char_divisor,$datafile[$i]);
$posicion = 0;
foreach($dt_data as $dt_data_valor) {
$dt_data_valor = eregi_replace($char_texto,"",$dt_data_valor);
agregar_datos($dt_data_valor,$posicion);
$posicion++;
}
}
return true;
}
else{
return false;
}
}
function agregar_datos($dt_data_valor,$posicion){
global $datatext;
global $dt_campos_posicion;
$dt_data_valor = trim($dt_data_valor);
array_push($datatext["$dt_campos_posicion[$posicion]"],$dt_data_valor);
}
function agregar_campo($n_campo){
$n_campo = trim($n_campo);
global $datatext;
global $dt_campos_posicion;
if(!isset($datatext)){
$datatext = array(
"$n_campo" => array()
);
$dt_campos_posicion = array("$n_campo");
}
else{
$temp_data = array(
"$n_campo" => array()
);
$datatext = array_merge($datatext,$temp_data);
array_push($dt_campos_posicion,"$n_campo");
}
}
?>
2- Cuando lo vayas a utilizar incluyes dentro del archivo php que mostrara los resultados el datatext_function.php
Código PHP:
<?php include("datatext_function.php")?>
3- Para usarlo necesitaras darle valores a unas variables que la funcion necesitara y que llamara de forma global:
Código PHP:
<?php
$dt_archivo = "data/data.dt";
$char_campo = "~";
$char_texto = "#";
$char_divisor = "^";
?>
Aqui te defino para que sriven las variables:
1-
$dt_archivo es donde diras que archivo deseas abrir con su ruta.
2-
$char_campo este caracter es para saber cuales seran los campos que formaran la estructura de tu archivo, aqui me refiero a que tu dijiste que tienes: nombre,apellido,email como campos o maneras de estructurar tu txt.
La primera linea de tu txt debe ser:
~id^nombre^apellido^email
Asi la funcion sabe que la linea inicial osea la primera linea del archivo de texto son los campos porque inician con ~, fijate que el separador que uso para dividir los campos es el signo ^
3-
$char_texto esta es la detecta que las demas lineas de contenido son las que inician por # puedes poner otro signo si deseas que las lineas de contenido inicien con % o cualquier otro signo.
4-
$char_divisor este es el que se encarga de dividir los contenidos y los campos, podras ver que el divisor en el ejemplo de los campos era ^.
Ejemplo de un archivo txt ya formatiado con esta estructura que la funcion usara y no dara errores:
~id^nombre^apellido~email
#1^Manuel^Gonzalez^
[email protected]
#2^Luis^Patiño^
[email protected]
#3^Alberto^Castrellon^
[email protected]
Alli ves como esta estructurado un archivo adecuadamente para que la funcion y las variables de configuracion trabajen bien., asi se leera sin error todo y se cargara a un array que sera $datatext
Es impredecible que el primer campo se llame id y que el contenido de cada nombre y apellido lleve delante un id unico para que asi tengan una ubicacion fija en todo esto.
5- Despues de tener todo solo llamas a la funcion que cargara todo y convertira a la variable array como global para que la puedas accesar.
Código PHP:
<?php
# Aqui se inicia la funcion y carga todo el contenido del txt
datatext_start($dt_archivo);
# aqui se muestra en pantalla los contenidos recorriendo
# el array con un for., hasta el momento funciona bien con for.
for($i=0;$i<count($datatext["id"]);$i++) {
echo "<b>".$datatext["nombre"][$i];
echo "</b><br>";
echo $datatext["apellido"][$i]."<br>";
echo $datatext["email"][$i]."<hr>";
}
?>
has las pruebas con la estructura que te dije y usando la funcion y veras que funcionara bien, despues dentro del for puedes hacer validaciones como por ejemplo:
Código PHP:
<?php
for($i=0;$i<count($datatext["id"]);$i++) {
if($datatext["nombre"][$i]=="Manuel"){
echo $datatext["email"][$i]."<br>";
}
}
?>
Ese ejemplo dice que si el nombre coincide con Manuel que imprima el email sino que no imprima nada.
Espero te sirva cualquier consulta dejamela saber.