Нет, нет, для начала, невозможно иметь массив с элементами с одинаковым ключом
$x =array();
$x['foo'] = 'bar' ;
$x['foo'] = 'baz' ; #replaces 'bar'
Во-вторых, если вы хотите просто поставить префикс перед цифрами, чтобы
$x[0] --> $x['foo_0']
Это вычислительно невозможно сделать без зацикливания. В настоящее время нет никаких php-функций для задачи «префикса ключа», и самым близким является «extract» , который будет ставить префикс числовых ключей перед тем, как сделать их переменными.
Самый простой способ такой:
function rekey( $input , $prefix ) {
$out = array();
foreach( $input as $i => $v ) {
if ( is_numeric( $i ) ) {
$out[$prefix . $i] = $v;
continue;
}
$out[$i] = $v;
}
return $out;
}
Кроме того, после прочтения использования XMLWriter я думаю, что вы будете писать XML неправильно.
<section>
<foo_0></foo_0>
<foo_1></foo_1>
<bar></bar>
<foo_2></foo_2>
</section>
Не очень хороший XML.
<section>
<foo></foo>
<foo></foo>
<bar></bar>
<foo></foo>
</section>
Лучше XML, потому что при толковании дублирующиеся имена не имеют значения, потому что все они численно смещены, например:
section => {
0 => [ foo , {} ]
1 => [ foo , {} ]
2 => [ bar , {} ]
3 => [ foo , {} ]
}