Foros del Web » Programando para Internet » PHP »

Convertir una cadena de texto en índices de una array (Solucionado)

Estas en el tema de Convertir una cadena de texto en índices de una array (Solucionado) en el foro de PHP en Foros del Web. Hola a todos: Resulta que estoy trabajando en un script para crear menús. La idea es que los menús se almacenen en una array, de ...
  #1 (permalink)  
Antiguo 19/09/2009, 03:17
Avatar de sumolari  
Fecha de Ingreso: mayo-2006
Ubicación: localhost
Mensajes: 1.367
Antigüedad: 18 años
Puntos: 18
Convertir una cadena de texto en índices de una array (Solucionado)

Hola a todos:

Resulta que estoy trabajando en un script para crear menús. La idea es que los menús se almacenen en una array, de forma similar a esta:

Código:
$matriz => [1] => ['nombre'] = Link 1
                             ['url'] = http://miweb.com
                             ['padres'] = 
                             ['sublinks'] => [1] => ['nombre'] = Sublink 1
                                                    ['url'] = http://otraweb.com
                                                    ['padres'] = 1
                                                    ['sublinks'] => [1] => ['nombre'] = Link nieto
                                                                           ['url'] = http://maswebs.com
                                                                           ['padres'] = 1-1
                                                                           ['sublinks'] = ETC
Como podéis ver, la matriz se repite en cada "sublinks", de forma que nada más mirar la matriz se podría observar cómo es el menú.

El problema lo tengo en la insercion de contenido. Para insertar el contenido basta con:

Código PHP:
//$ultimo_indice se calcula automaticamente y $nuevo_link es una matriz que contiene los indices 'nombre', 'url' y demás
$array_original[$ultimo_indice] = $nuevo_link 
Si sólo se pudiesen crear sublinks (es decir, si no hubiesen nietos), el código sería algo así:

Código PHP:
if ($_POST['padre'] == '') {
$array_original[$ultimo_indice] = $nuevo_link;
} else {
$array_original[$_POST['padre']]['sublinks'][$ultimo_indice] = $nuevo_link

Hasta aquí todo funciona a la perfección, el problema viene al tratar de añadir los links nietos (en realidad al añadir infinitos niveles de links, no tiene por que estar limitado a abuelo-padre-hijo), ya que el índice de la matriz se tiene que calcular automáticamente.

Después de trastear un rato he conseguido almacenar los índices que debería tener la matriz en un variable. Si imprimo dicha variable obtendría algo así: [1]['sublinks']['1']['sublinks]['1'].

La idea sería utilizar esa variable como índices de la array y digo índices porque la vaiable no tiene que ser un índice, sinó que cada llave debería separar un nivel, y eso es lo que no consigo, me explico:

Código PHP:
$indices "1]['sublinks'][1]['sublinks][1"// No se crea la variable así, pero sí de una forma similar
$array[$indices] = $nuevo_link;

//Y el resultado es
$array => [1]['sublinks'][1]['sublinks'][1] => ['nombre']
                                                                   [
'url']
                                                                   
ETC

// En lugar de
$array => [1] => ['sublinks'] => [1] => ['sublinks'] => [1] => ['nombre']
                                                                                              [
'url'
                                                                                              
ETC 
Es decir, me toma la varible como texto plano, en lugar de detectar las separaciones de los índices, con lo cual no puedo crear el tercer nivel de la matriz.

Lo que quiero hacer es transformar la variable $indices de forma que no la tome como texto plano, sino que me separe los índices y pueda crear los diversos niveles.

Muchas gracias por vuestra ayuda.

Edito:

Ya he encontrado la solución. Os pongo el código algo resumido:

Código PHP:
// $current contiene los índices de la matriz ([1]['sublinks'][1]['sublinks'])
$long=strlen($current)-1;
        
$current substr($current,0,$long);
        
$current substr($current,1);  

// Ahora $current está incompleto, le falta el corchete inicial y el final
        
        
$string '$wp_main_menu_link_prev['.$current.']';

// $string ahora almacena el nombre de la matriz junto con los índices
        
        
$code $string.' = $new_link;';

// $code es el código que me solucionaría el problema: $string (la matriz y sus índices) tiene por valor $new_link (la matriz con la información del link)
        
        
eval($code);

// Con eval "ejecutamos" el código de antes
        
        
return $wp_main_menu_link_prev;
// Devolvemos la matriz alterada correctamente 

Última edición por sumolari; 19/09/2009 a las 09:22 Razón: Solucionado
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




La zona horaria es GMT -6. Ahora son las 03:58.