使用带有多维数组的PHP将MySQL结果转换为XML格式
我试图使我的XML格式如下所示: 但我的代码现在不会循环“order_line”数组,并将返回如下结果: 下面是我编写的代码示例:使用带有多维数组的PHP将MySQL结果转换为XML格式,php,mysql,arrays,xml,multidimensional-array,Php,Mysql,Arrays,Xml,Multidimensional Array,我试图使我的XML格式如下所示: 但我的代码现在不会循环“order_line”数组,并将返回如下结果: 下面是我编写的代码示例: $result = $this->db->query("SELECT * FROM `grn_order` a"); foreach($result->result() as $row ) { $result_line = $this->db->query("SELECT * FROM `grn_o
$result = $this->db->query("SELECT * FROM `grn_order` a");
foreach($result->result() as $row )
{
$result_line = $this->db->query("SELECT * FROM `grn_order_line` a where a.order_no = '$row->order_no'");
foreach($result_line->result() as $row_line);
{
$line = array(
'guid' => $row_line->guid,
'itemcode' => $row_line->itemcode,
);
}
$my_array[] = array(
'order_no' => $row->order_no,
'loc_code' => $row->loc_code,
'trans_code' => $row->trans_code,
'po_no' => $row->po_no,
'order_line' => $line
);
} $xml = new SimpleXMLElement('<orders/>');
// function callback
$data = $this->array2XML($xml, $my_array);
print $xml->asXML();
function array2XML($obj, $array)
{
foreach ($array as $key => $value)
{
if(is_numeric($key))
$key = 'order';
if (is_array($value))
{
$node = $obj->addChild($key);
$this->array2XML($node, $value);
}
else
{
$obj->addChild($key, htmlspecialchars($value));
}
}
}
$result=$this->db->query(“从'grn_order'a'中选择*);
foreach($result->result()作为$row)
{
$result\u line=$this->db->query(“从`grn\u order\u line`a中选择*,其中a.order\u no='$row->order\u no'”;
foreach($result\u line->result()作为$row\u line);
{
$line=数组(
'guid'=>$row\u line->guid,
'itemcode'=>$row\u line->itemcode,
);
}
$my_数组[]=数组(
“订单号”=>$row->订单号,
“loc_代码”=>$row->loc_代码,
“交易代码”=>$row->交易代码,
“采购订单号”=>$row->采购订单号,
“订单行”=>$line
);
}$xml=新的SimpleXMLElement(“”);
//函数回调
$data=$this->array2XML($xml,$my_数组);
打印$xml->asXML();
函数array2XML($obj,$array)
{
foreach($key=>$value的数组)
{
如果(是数字($key))
$key='order';
if(是_数组($value))
{
$node=$obj->addChild($key);
$this->array2XML($node,$value);
}
其他的
{
$obj->addChild($key,htmlspecialchars($value));
}
}
}
您继续覆盖加载循环中的最后一行。把它改成
$line = [];
foreach($result_line->result() as $row_line);
{
$line[] = array(
'guid' => $row_line->guid,
'itemcode' => $row_line->itemcode,
);
}
因此,每一行都是使用
$line[]
添加的,理想情况下,代码、配置和数据应该作为文本而不是图像提供。请阅读以了解原因-简短版本是图像与剪贴簿、屏幕阅读器和搜索引擎不兼容。如果你能修改你的问题,那就太好了。谢谢你的回答奈杰尔·伦,它现在工作了,但结果仍然不能满足我的要求。返回的结果将如下循环:1 009898 1 77827728,但我希望格式中没有另一个子项,就像我附加的图片一样。我能帮上忙。提前感谢问题在于array2XML()
函数正在添加额外的order元素($key='order';
)。最好在主foreach
循环中构建XML,而不是构建一个数组,然后在遇到类似问题时尝试转换它。