数组到xml php问题与数组

时间:2017-08-14 21:55:07

标签: php arrays xml

我创建了以下功能:

    John Smith, Tom Perry

将数组转换为xml。我试图在xml中创建重复项,并且当我在里面使用数组时似乎遇到了问题。

以下数组......

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的这一部分

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

我基本上不希望< 0>和< 1>在用户标识之前,我理解为什么这些索引存在但是不能为我的生活找到一种方法来让它在没有它们的情况下工作。请问阵列向导有什么想法吗?

感谢您的阅读。

3 个答案:

答案 0 :(得分:0)

如果你想得到这样的东西

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

答案 1 :(得分:0)

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

如果你使用自动生成的键是整数(或不是字符串)的事实......

*argv[]

答案 2 :(得分:-1)

试试这个

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