【问题标题】:PHP: Deserializing a XML to an arrayPHP:将 XML 反序列化为数组
【发布时间】:2017-07-27 23:53:51
【问题描述】:

一个月前我问如何在 c# 中反序列化 XML,现在我必须在 PHP 中做同样的事情,但我无法使其正常工作,这是我的 XML 格式:

<?xml version="1.0" encoding="UTF-8" ?>
<response uri="/api/" action="EXPORT">
<result>
    <rows>
        <row>
            <column name="Name1">Value1</column>
            <column name="Name2">Value2</column>
        </row>
        <row>
            <column name="Name1">Value1</column>
            <column name="Name2">Value2</column>
        </row>
    </rows>
</result>
</response>

这就是我想要做的:

$row = new SimpleXMLElement($XML);

    $json = json_encode($row);
    $array = json_decode($json,TRUE);


    foreach($array["result"]["rows"]["row"] as $row){

           $array[$k] = [
                    'Name1' => $row["column"][0],
                    'Name2' => $row["column"][1]
                    ];

              $k++;
    }

这样做的问题是,如果使用 foreach 之类的:

foreach($array as $arr){
            print_r($arr);
            echo"<br>";
}

给我这个结果:

数组([uri] => /api/ [action] => 导出)

数组 ( [rows] => 数组 ( [row] => 数组 ( [0] => 数组 ( [column] => 数组 ( [0] => Value1 [1] => Value2 ) ) [1] => 数组 ( [column] => 数组 ( [0] => 值 1 [1] => 值 2 ) ) ) ) )

数组([名称1] => 值1 [名称2] => 值2)

数组([名称1] => 值1 [名称2] => 值2)

我只想要它打印的最后 2 个结果,因为这实际上是我需要的,我该如何解决这个问题?

【问题讨论】:

标签: php arrays xml


【解决方案1】:

你快到了。这就是我想出来的

<?php

$XML='<?xml version="1.0" encoding="UTF-8" ?>
<response uri="/api/" action="EXPORT">
<result>
    <rows>
        <row>
            <column name="Name1">Value1</column>
            <column name="Name2">Value2</column>
        </row>
        <row>
            <column name="Name1">Value1</column>
            <column name="Name2">Value2</column>
        </row>
    </rows>
</result>
</response>';

$row = new SimpleXMLElement($XML);

$json = json_encode($row);
$array = json_decode($json,TRUE);

foreach($array['result']['rows']['row'] as $key=>$value){
    echo '<pre>';
    print_r($value);
    echo '</pre>';
}

?>

Array
(
    [column] => Array
        (
            [0] => Value1
            [1] => Value2
        )

)

Array
(
    [column] => Array
        (
            [0] => Value1
            [1] => Value2
        )

)

你可以使用 $value['column']['0'] 来获取 Value1

你也可以启动第二个 foreach 来循环它们

<?php

foreach($array['result']['rows']['row'] as $key=>$value){
    foreach($value['column'] as $k=>$v){
        echo "[Name".$k++."] = $v<br />";
        // or you can have it in an array like this
        $new_array[]["Name".$k++]=$v;
    }
}

?>

[Name1] = Value1
[Name2] = Value2
[Name1] = Value1
[Name2] = Value2

$new_array 然后看起来像

Array
(
    [0] => Array
        (
            [Name1] => Value1
        )

    [1] => Array
        (
            [Name2] => Value2
        )

    [2] => Array
        (
            [Name1] => Value1
        )

    [3] => Array
        (
            [Name2] => Value2
        )

)

你也可以像这样改变字符串末尾的 [] 将它们组合在一起

$new_array["Name".$k++][]=$v;

结果将是:

Array
(
    [Name1] => Array
        (
            [0] => Value1
            [1] => Value1
        )

    [Name2] => Array
        (
            [0] => Value2
            [1] => Value2
        )

)

您可以使用第一个循环的 $key 编号而不是使用 [],这样可以对它们进行不同的分组

$new_array[$key]["Name".$k++]=$v;

会像这样输出和排列

Array
(
    [0] => Array
        (
            [Name1] => Value1
            [Name2] => Value2
        )

    [1] => Array
        (
            [Name1] => Value1
            [Name2] => Value2
        )

)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-04-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-09
    相关资源
    最近更新 更多