мне удалось разобрать массив из моего собственного языка. (для этого: язык проекта lance называется lpl)
так .. \ копье (говорит (привет))
будет отформатирован в
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
)
)
Я сейчас пытаюсь создать xml структуру из этого, вот моя попытка сделать это:
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;
}
что я получаю из этого, так это:
<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>
Можно ли «пропустить» числовые ключи в массиве? скажем .. перейти глубже к следующему «реальному» ключу массива?
наш я должен переосмыслить мой созданный массив
спасибо за любой ответ.
извините за плохое форматирование. я вроде новичок в stackoverflow.
копье
Я попытался восстановить ваш массив с помощью следующего:
$arr = array();
$arr[] = array(
'args'=>array(
array(
'args'=>array(
array(
'args'=>array(
'hello',
),
'funcname'=>'text',
),
),
'funcname'=>'says',
),
),
'funcname'=>'lance',
);
Затем я обновил вашу функцию 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;
}
Это привело к следующему, что близко к тому, что вы ищете:
<args>
<args>
<args>
hello
</args>
<funcname>
text
</funcname>
</args>
<funcname>
says
</funcname>
</args>
<funcname>
lance
</funcname>
Не хватает только корневого элемента. Вы можете добавить это вручную, используя:
'<xml>' . arr2xml($arr) . '</xml>'
Надеюсь это поможет!
Других решений пока нет …