проблема с массивом в xml php с массивом (ами)

Я создал функцию ниже:

public function arrayToXml(\SimpleXMLElement $bodyXml, array $arrayToBeConverted)
{
foreach ($arrayToBeConverted as $element => $value) {
$element = ucfirst($element);
if (is_array($value)) {
$newXmlNode = $bodyXml->addChild($element);
$newXmlNode = $this->arrayToXml($newXmlNode, $value);
} else {
$bodyXml->addChild($element, $value);
}
}
$newXml = $bodyXml;
return $newXml;
}
}

Который преобразует массив в XML. Я пытаюсь создать дубликаты в XML и, кажется, столкнулся с проблемой при использовании массива внутри.

Следующий массив …

$testArray =
[
"Pagination" =>
[
"EntriesPerPage" => 2,
],
["UserId" => "Usertest1"], ["UserId" => "Usertest2"],
];

Выводит этот раздел XML

<pagination>
<entriesperpage>2</entriesperpage>
</pagination>
“<0>"<userid>Usertest1</userid>
“<1>"<userid>Usertest2</userid>

Я в принципе не хочу <0> и <1> До идентификатора пользователя я понимаю, почему эти индексы существуют, но я не могу найти способ заставить это работать без них. У какого-нибудь мастера массивов есть какие-нибудь идеи, пожалуйста?

Спасибо за чтение.

0

Решение

попробуй это

public function arrayToXml(\SimpleXMLElement $bodyXml, array $arrayToBeConverted)
{
foreach ($arrayToBeConverted as $element => $value) {
$element = ucfirst($element);
if (is_array($value)) {
$pattern = '/^\d/';

if (!preg_match($pattern, $element)){
$newXmlNode = $bodyXml->addChild($element);
$newXmlNode = $this->arrayToXml($newXmlNode, $value);
}
else{
$bodyXml = $this->arrayToXml($bodyXml, $value);
}

} else {
$bodyXml->addChild($element, $value);
}
}
$newXml = $bodyXml;
return $newXml;
}
-1

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

Если вы хотите получить что-то подобное

<Pagination>
<EntriesPerPage>2</EntriesPerPage>
</Pagination>
<UserId>Usertest1</UserId>
<UserId>Usertest2</UserId>

тогда вам нужно изменить исходный массив $ arrayToBeConverted. Должно выглядеть так

$testArray =
[
["Pagination" => ["EntriesPerPage" => 2]],
["UserId" => "Usertest1"],
["UserId" => "Usertest2"]
];

и добавить дополнительный foreach

foreach ($arrayToBeConverted as $arrayToBeConvertedElements) {
foreach ($arrayToBeConvertedElements as $element => $value) {
$element = ucfirst($element);
if (is_array($value)) {
$newXmlNode = $bodyXml->addChild($element);
$newXmlNode = $this->arrayToXml($newXmlNode, $value);
} else {
$bodyXml->addChild($element, $value);
}
}
}
0

Сложность состоит в том, чтобы знать, когда использовать ключ массива в качестве элемента, а когда нет. Даже когда вы используете [ 'a', 'b' ]это эквивалентно [ 0=>'a', 1=>'b'],

Если вы используете тот факт, что автоматически сгенерированные ключи являются целыми числами (или не строками) …

public function arrayToXml(\SimpleXMLElement $bodyXml, array $arrayToBeConverted)
{
foreach ($arrayToBeConverted as $element => $value) {
if (is_array($value)) {
if ( is_string($element) )   {
$newXmlNode = $bodyXml->addChild(ucfirst($element));
}
$newXml = $this->arrayToXml($newXmlNode, $value);
} else {
$newXml->addChild($element, $value);
}
}
return $newXml;
}
0
По вопросам рекламы ammmcru@yandex.ru
Adblock
detector