【问题标题】:how to give array index a named key on runtime如何在运行时为数组索引指定一个命名键
【发布时间】:2015-08-12 09:43:50
【问题描述】:

我在这里尝试使用 XMLSerializer 类将数据从 mysql 表转换为 xml 文件。我希望 xml 文件是这样的

为此,我需要将数字索引更改为“书”。目前我可以生成以下形式的数组:它具有数字索引,但出于我的目的,两个索引(0 和 1)都必须是'书'。

如何将两个数字索引都更改为“book”??

完整代码:

   include('XMLSerializer/XML/Serializer.php');
   $host='localhost';
   $user='root';
   $pass='';
   $db='xmlserializer';

   $dbh=new PDO("mysql:host=$host;dbname=$db",$user,$pass);
   $sql='SELECT lname,fname FROM employee';
   $sth=$dbh->prepare($sql);
   $sth->execute();

   $xml=array('library'=>array());

   $i=0;
   while($result=$sth->fetch(PDO::FETCH_ASSOC)){
       array_push($xml['library'],$result);

   }
   print_r($xml);
   $serializer=new XML_Serializer();


   $result=$serializer->serialize($xml);
   if($result===true){
      file_put_contents('myxml.xml',$serializer->getSerializedData());
   }

【问题讨论】:

  • 如果您的 2 个键变为“book”,它们将被覆盖...您希望像 ["book1"], ["book2"] 这样的键吗?或者你想要多一个维度是 ["library"]["book"][0] ?
  • 我可以管理您的建议,但要获得所需的 xml 格式,它们都必须是 book。
  • 问题是你不能有像array("book" => array(...), "book" => array(...))这样的数组,所以你最好创建单独的数组,每本书一个,然后为每个数组生成你的xml...跨度>
  • 我知道他们会覆盖每一个。但仍然无法找到替代方法:(
  • 正如我所说,您必须分别生成每本书的 xml,或者您必须按照@ericMartinez 的建议更改层次结构...

标签: php mysql arrays xml xml-serialization


【解决方案1】:

你需要在XML_Serializer中设置default tag

所以你的代码应该是:

$options = array(
      "defaultTagName"  => "book",
);

$serializer = new XML_Serializer($options);

查看此链接了解更多信息:https://pear.php.net/manual/en/package.xml.xml-serializer.xml-serializer.examples.php

【讨论】:

    猜你喜欢
    • 2010-09-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-29
    • 2016-06-25
    • 2021-05-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多