Foro de elhacker.net

Programación => PHP => Mensaje iniciado por: Xephiro en 16 Enero 2009, 05:45 am



Título: Una pregunta
Publicado por: Xephiro en 16 Enero 2009, 05:45 am
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:


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

Lea como

Metod($Datos);


Código:
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


Título: Re: Una pregunta
Publicado por: WHK en 16 Enero 2009, 07:36 am
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
  1. <?php
  2.  
  3. if(!$datos = $_GET['datos']){
  4. $datos = '{{D11, D12, D13}, D2, D3}fuck %&$<>();meequiboqueaaahhh!!!GGrr';
  5. }
  6. echo metodo_hacktor($datos);
  7. echo '<br><br>';
  8. //echo metodo_hacktor($datos, 'D1');
  9.  
  10. function metodo_hacktor($datos, $id_D = false){
  11. /* Eliminamos el primer y último carácter asumiendo
  12.  que son llaves de apertura y cierre y eliminamos los espacios en blanco,
  13.  además permitimos solo los carácteres utiliozados para evitar
  14.  mostrar errores al procesar el contenido. */
  15. $datos = preg_replace('|[^D0-9,{}]|i', '', $datos);
  16. $datos[0] = ' ';
  17. $datos[strlen($datos) - 1] = ' ';
  18. $datos = str_replace(' ', '', $datos);
  19. if(strlen(preg_replace('|[^{}]|i', '', $datos)) % 2 == 0){
  20. /*
  21.   if(!$datos = explode(',', $datos)){
  22.    return 'No hay datos para procesar.';
  23.   }
  24.    */
  25.  // $buffer = explode('{', $datos);
  26.  
  27.  
  28. }else{
  29.  return 'Error de sintaxis, faltan o sobran llaves.';
  30. }
  31.  
  32. /*
  33.  if($id_D){
  34.  
  35.  }
  36.  */
  37. }
  38. /*
  39. Pos
  40. 0     D1 -> D11 - D12 - D13
  41. 1     D2 -> D2
  42. 2     D3 -> D3
  43.  
  44. y con D1
  45. D1:
  46.  
  47. Pos
  48. 0     D11 -> D11
  49. 1     D12 -> D12
  50. 2     D13 -> D13
  51. */
  52. ?>


Título: Re: Una pregunta
Publicado por: Erik# en 16 Enero 2009, 14:38 pm
Y si utilizas arrays multidimensionales?


Título: Re: Una pregunta
Publicado por: Xephiro en 16 Enero 2009, 15:55 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.


Título: Re: Una pregunta
Publicado por: дٳŦ٭ en 16 Enero 2009, 23:28 pm
$variable="dc1,dc2,dc3,gp4";

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

Suerte


Título: Re: Una pregunta
Publicado por: Xephiro en 17 Enero 2009, 00:53 am
Pero, eso tambien generaria arrays de 3 o 4 dimenciones?

osea que yo pusiera

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

¿?


Título: Re: Una pregunta
Publicado por: Nakp en 17 Enero 2009, 01:45 am
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


Título: Re: Una pregunta
Publicado por: SaXo en 17 Enero 2009, 13:21 pm
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