使用带有多维数组的PHP将MySQL结果转换为XML格式

使用带有多维数组的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

我试图使我的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_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,而不是构建一个数组,然后在遇到类似问题时尝试转换它。