首页 > 解决方案 > 使用带有多维数组的 PHP 将 MySQL 结果转换为 XML 格式

问题描述

我试图让我的 XML 格式是这样的:

我想要的xml格式

但是我的代码现在不会循环访问“order_line”数组,并且会像这样返回:

错误的 XML 格式

下面是我做的代码示例:

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

标签: phpmysqlarraysxmlmultidimensional-array

解决方案


您继续覆盖加载循环中的最后一行。将其更改为...

$line = [];
foreach($result_line->result() as $row_line);
{
    $line[] = array(
        'guid' => $row_line->guid,
        'itemcode' => $row_line->itemcode,
    );
}

所以每一行都是用$line[].


推荐阅读