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
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 :-\
<?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)) % 2 == 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
*/
?>
Y si utilizas arrays multidimensionales?
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
Pero, eso tambien generaria arrays de 3 o 4 dimenciones?
osea que yo pusiera
{{{D111,D112}, D12},{D21, D22},D3,D4,D5}
¿?
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
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