数组到 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>

我基本上不希望在userid之前使用<0>和<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);
}
}
}

困难在于知道何时使用数组键作为元素,何时不使用。 即使你使用[ '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;
}

试试这个

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;
}

最新更新