Foros del Web » Programando para Internet » PHP »

[Aporte] Crear array multidimensional dinámicamente de una cadena

Estas en el tema de [Aporte] Crear array multidimensional dinámicamente de una cadena en el foro de PHP en Foros del Web. Saludos, Estaba preparando una forma de leer unos archivos ini en forma dinámica y necesitaba crear array multidimensionales para acceder a las diferentes areas y ...
  #1 (permalink)  
Antiguo 01/02/2013, 19:46
Avatar de abimaelrc
Colaborador
 
Fecha de Ingreso: mayo-2009
Ubicación: En el planeta de Puerto Rico
Mensajes: 14.734
Antigüedad: 15 años, 1 mes
Puntos: 1517
[Aporte] Crear array multidimensional dinámicamente de una cadena

Saludos,

Estaba preparando una forma de leer unos archivos ini en forma dinámica y necesitaba crear array multidimensionales para acceder a las diferentes areas y se me ocurrió crear esta función, estuve un rato para que en pocas líneas hiciera lo que quería, lo dejo por si le sirve a alguien en algún futuro y si alguien la quiere mejorar pues bienvenido

Código PHP:
Ver original
  1. function createMultidimensionalArray($keys, $value = null, $delimiter = '.')
  2. {
  3.     $keysArray  = explode($delimiter, $keys);
  4.     $func       = function ($keys, $value) use (&$func) {
  5.         $fixValue       = array();
  6.         $keys           = array_reverse($keys);
  7.         $key            = array_pop($keys);
  8.         $keys           = array_reverse($keys);
  9.         $fixValue[$key] = (empty($keys) === false)
  10.                         ? $func($keys, $value)
  11.                         : ((empty($value) === true) ? $key : $value);
  12.  
  13.         return $fixValue;
  14.     };
  15.  
  16.     return $func($keysArray, $value);
  17. }
  18.  
  19. echo '<pre>';
  20. var_dump(createMultidimensionalArray('foo.bar.baz'));
  21. var_dump(createMultidimensionalArray('1.2.3'));
  22. var_dump(createMultidimensionalArray('foo', 'bar'));
  23. var_dump(createMultidimensionalArray('baz.bat', 'candy'));
  24. echo '</pre>';
Código localhost:
Ver original
  1. array(1) {
  2.   ["foo"]=>
  3.   array(1) {
  4.     ["bar"]=>
  5.     array(1) {
  6.       ["baz"]=>
  7.       string(3) "baz"
  8.     }
  9.   }
  10. }
  11. array(1) {
  12.   [1]=>
  13.   array(1) {
  14.     [2]=>
  15.     array(1) {
  16.       [3]=>
  17.       string(1) "3"
  18.     }
  19.   }
  20. }
  21. array(1) {
  22.   ["foo"]=>
  23.   string(3) "bar"
  24. }
  25. array(1) {
  26.   ["baz"]=>
  27.   array(1) {
  28.     ["bat"]=>
  29.     string(5) "candy"
  30.   }
  31. }
__________________
Verifica antes de preguntar.
Los verdaderos amigos se hieren con la verdad, para no perderlos con la mentira. - Eugenio Maria de Hostos

Última edición por abimaelrc; 01/02/2013 a las 20:06 Razón: arreglar variables
  #2 (permalink)  
Antiguo 01/02/2013, 22:28
Avatar de dashtrash
Colaborador
 
Fecha de Ingreso: abril-2007
Ubicación: Ni en Sevilla,ni en Sanlúcar..qué más da..
Mensajes: 927
Antigüedad: 17 años, 3 meses
Puntos: 270
Respuesta: [Aporte] Crear array multidimensional dinámicamente de una cadena

Me parece demasiado enrevesado..
Código PHP:
Ver original
  1. function multidim($key,$value,$delimiter='.')
  2. {
  3.    $parts=explode($delimiter,$key);
  4.    $result=array();
  5.    $cur=& $result;
  6.    foreach($parts as $temp)  
  7.       $cur=& $cur[$temp];
  8.    $cur=$value;
  9.    return $result;
  10. }
  11. var_dump(multidim('a.b.c',3));
  12. var_dump(multidim('a',1));
  #3 (permalink)  
Antiguo 02/02/2013, 08:55
Avatar de abimaelrc
Colaborador
 
Fecha de Ingreso: mayo-2009
Ubicación: En el planeta de Puerto Rico
Mensajes: 14.734
Antigüedad: 15 años, 1 mes
Puntos: 1517
Respuesta: [Aporte] Crear array multidimensional dinámicamente de una cadena

Me gusta, me gusta, no usas funciones recursivas y me gustó el juego que hiciste con la referencia.
__________________
Verifica antes de preguntar.
Los verdaderos amigos se hieren con la verdad, para no perderlos con la mentira. - Eugenio Maria de Hostos

Etiquetas: cadena, dinamicamente, multidimensional
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

SíEste tema le ha gustado a 4 personas




La zona horaria es GMT -6. Ahora son las 20:43.