Menú Principal

Una pregunta

Iniciado por Xephiro, 16 Enero 2009, 05:45 AM

0 Miembros y 1 Visitante están viendo este tema.

Xephiro

Quisiera saber, como puedo hacer para que al ingresar datos de la siguiente forma

{{D11, D12, D13}, D2, D3}
eso me lo pueda tomar como un arreglo

De la siguiente forma:


<? $Datos = "{{D11, D12, D13}, D2, D3}"; ?>

Lea como

Metod($Datos);


Salida:

Pos
0     D1 -> D11 - D12 - D13
1     D2 -> D2
2     D3 -> D3

y con D1

D1:

Pos
0     D11 -> D11
1     D12 -> D12
2     D13 -> D13



Bueno, espero se entienda :D y si alguien me puede ayudar con algun metodo para poder tomar lo datos asi me encantaria

WHK

Si te entiendo pero me cuesta un poco hacerlo ya que hay muchas variantes que anteponerse, por ejemplo si
{{D11, D12, D13}, {{D11, D12, D13}, D2, {{D11, D12, D13}, D2, D3}}, D3}
habría que comenzar a hacer explode a todas las llaves de apertura y comenzar desde la última para asegurarnos de que vamos desde el nivel mas alto hasta el inferior e ir uniendo los resultados con las llaves restantes para comenzar a crear el array auqnue eso me complicó un poco  :P.

Ahi te dejo un poco el avance de tu función, yo me voy a dormir porque ya me dieron las 3.36am  :-\

Código (php) [Seleccionar]
<?php

if(!$datos $_GET['datos']){
 
$datos '{{D11, D12, D13}, D2, D3}fuck %&$<>();meequiboqueaaahhh!!!GGrr';
}
echo 
metodo_hacktor($datos);
echo 
'<br><br>';
//echo metodo_hacktor($datos, 'D1');

function metodo_hacktor($datos$id_D false){
 
/* Eliminamos el primer y último carácter asumiendo 
 que son llaves de apertura y cierre y eliminamos los espacios en blanco,
 además permitimos solo los carácteres utiliozados para evitar
 mostrar errores al procesar el contenido. */
 
$datos preg_replace('|[^D0-9,{}]|i'''$datos);
 
$datos[0] = ' ';
 
$datos[strlen($datos) - 1] = ' ';
 
$datos str_replace(' '''$datos);
 if(
strlen(preg_replace('|[^{}]|i'''$datos)) % == 0){
 
/*
  if(!$datos = explode(',', $datos)){
   return 'No hay datos para procesar.';
  }
   */
  // $buffer = explode('{', $datos);
  
  
 
}else{
  return 
'Error de sintaxis, faltan o sobran llaves.';
 }
 
 
/*
 if($id_D){
  
 }
 */
}
/*
Pos
0     D1 -> D11 - D12 - D13
1     D2 -> D2
2     D3 -> D3

y con D1
D1:

Pos
0     D11 -> D11
1     D12 -> D12
2     D13 -> D13
*/
?>

Erik#

Y si utilizas arrays multidimensionales?

Xephiro

Cita de: Erik# en 16 Enero 2009, 14:38 PM
Y si utilizas arrays multidimensionales?


Lo que pasa es que quiero que eso vaya dentro de un archivo config y para el usuario a mi juicio va a ser mas entendible agrupar los datos con llaves como { } que poniendole Array(); a cada agrupacion.

дٳŦ٭

$variable="dc1,dc2,dc3,gp4";

Luego la parseas con la ',' y la metes en un array.

Suerte


Con sangre andaluza :)


Xephiro

Pero, eso tambien generaria arrays de 3 o 4 dimenciones?

osea que yo pusiera

{{{D111,D112}, D12},{D21, D22},D3,D4,D5}

¿?

Nakp

no te sale hacerlo asi?

D11,D12,D13;D21,D22;D31,D32,D33

y haces 2 explodes xD uno con ; y el siguiente con , ;D
Ojo por ojo, y el mundo acabará ciego.

SaXo

Hola,

Bueno, definir la forma correcta de manejar datos en un fichero  depende bastante de cómo pueda usar el fichero ese usuario. Si por ejemplo tuviera un formulario donde el usuario introduce una serie de configuraciones para almacenarlas en un fichero optaría por usar datos serializados para almacenarlos (independientemente si va a un fichero o a base de datos). Si por ejemplo es el usuario el que confecciona el fichero para aplicar una configuración optaría por definir un patrón sencillo para evitar todos los errores que puedan derivarse. La elección de usar llaves para montar la estructura es más que probable que se produzcan muchos errores por que se olvidado de una llave o la estructura no es la correcta.

Así, a bote pronto, usaría una estructura parecida a esta. Aunque luego puede sufrir alguna variación dependiendo de las necesidades.

field_1 : a,b,c,d,e,f
field_2 : d
field_3 : versión 1

Ahora, existen varias formas de leer un fichero y obtener los datos de para formar las estructuras de datos adecuadas.

Voy a probar la forma en la que la suelo hacer ya que siempre me ha dado un buen resultado a la hora de manejar este tipo de ficheros.

$f = fopen('configure.cnf','r');
while ($value = fscanf($f,"%s : %s\n")) {
  list($clave,$valor) = $value;
  $arr[$clave] = explode(',',$valor);
}
fclose($f);

Existen otras formas de hacer esto, que no son ni mejores ni peores, y dependerán de las necesidades que tengamos en el momento para decidir usar una u otra forma.


Un saludo,

SaXo