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:
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ú.$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
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
Código PHP:
if ($_POST['padre'] == '') {
$array_original[$ultimo_indice] = $nuevo_link;
} else {
$array_original[$_POST['padre']]['sublinks'][$ultimo_indice] = $nuevo_link
}
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
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