для цикла — двигаться дальше по числовому ключу в многомерном массиве

мне удалось разобрать массив из моего собственного языка. (для этого: язык проекта 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.
копье

-1

Решение

Я попытался восстановить ваш массив с помощью следующего:

$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>'

Надеюсь это поможет!

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]