php - teclado - for loop-mueve más profundo en la tecla numérica en una matriz multidimensional
teclas alfanumericas (1)
logré analizar una matriz de mi propio idioma. (para esto: llamado lenguaje de proyecto de lanza - lpl)
entonces .. / lance (dice (hola)) se formateará para
Array
(
[0] => lpl_struct
(
[args] => Array
(
[0] => Array
(
[0] => lpl_struct
(
[args] => Array
(
[0] => Array
(
[0] => lpl_struct
(
[args] => Array
(
[0] => hello
)
[funcname] => text
)
)
)
[funcname] => says
)
)
)
[funcname] => lance
)
)
Ahora intento crear una estructura xml a partir de esto, aquí está mi intento de hacerlo:
function arr2xml($array) {
$xml = '''';
if (is_array($array) || is_object($array)) {
foreach ($array as $key => $value) {
if (is_numeric($key)) {
#move deeper in array to get the right NON-NUMERIC key
}
$xml .= ''<'' . $key . ''>'' . "/n" . $this->arr2xml($value) . ''</'' . $key . ''>'' . "/n";
}
} else {
$xml = htmlspecialchars($array, ENT_QUOTES) . "/n";
}
return $xml;
}
lo que estoy obteniendo de él hasta ahora es:
<0>
<args>
<0>
<0>
<args>
<0>
<0>
<args>
<0>
hello
</0>
</args>
<funcname>
text
</funcname>
</0>
</0>
</args>
<funcname>
says
</funcname>
</0>
</0>
</args>
<funcname>
lance
</funcname>
</0>
¿es posible "omitir" las teclas numéricas en la matriz ?. diga ... ¿pasar más profundo a la siguiente tecla de matriz "real"?
nuestro deberia reconsiderar mi matriz creada
gracias por cualquier respuesta.
sry por mal formateo. soy un poco nuevo en stackoverflow. lanza
Traté de reconstruir tu matriz usando lo siguiente:
$arr = array();
$arr[] = array(
''args''=>array(
array(
''args''=>array(
array(
''args''=>array(
''hello'',
),
''funcname''=>''text'',
),
),
''funcname''=>''says'',
),
),
''funcname''=>''lance'',
);
Luego actualicé su función arr2xml:
function arr2xml($array) {
$xml = '''';
if (is_array($array) || is_object($array)) {
foreach ($array as $key => $value) {
if (is_numeric($key)) {
// Skip a numeric key and recurse.
$xml .= arr2xml($value);
}
else {
$xml .= ''<'' . $key . ''>'' . "/n" . arr2xml($value) . ''</'' . $key . ''>'' . "/n";
}
}
} else {
$xml = htmlspecialchars($array, ENT_QUOTES) . "/n";
}
return $xml;
}
Esto produjo lo siguiente, que está cerca de lo que estás buscando:
<args>
<args>
<args>
hello
</args>
<funcname>
text
</funcname>
</args>
<funcname>
says
</funcname>
</args>
<funcname>
lance
</funcname>
Lo único que falta es el elemento raíz. Puedes agregar eso manualmente usando:
''<xml>'' . arr2xml($arr) . ''</xml>''
¡Espero que esto ayude!