【问题标题】:concatenate array values ​into string?将数组值连接成字符串?
【发布时间】:2021-10-05 11:32:06
【问题描述】:

我有这个数组,存储在一个名为 $data 的变量中:

Array
(
    [0] => Array
        (
            [Code] => DES001
            [Commennte] => 
            [Quantity] => 1
            [Price] => 135.00
            [Unity] => 1
        )

)

我想添加到另一个变量以发送到 API

$body = '<request>
                    <method><![CDATA[registra]]></method>
                    <param>
                    <name><![CDATA[pedido]]></name>
                    <value><![CDATA[{"Pedido":
                            {
                             "Nombre":"",
                             "Producto":{
                                "Product":"'.$datos.'"
                            }
                        }
                    }
                    ]]>
        </value>
        </param>
    </params>
</request>';

但是当我回显 $body 时,结果是这样的:

"Product":{
  "Product":"Array"
}

如何添加字符串以获得如下输出:

"Product":{
     "Product":[
          {"ClaveProducto":"DES001",
          "Cantidad":"1",
          "Precio":"135",
          "Unidad":"PIEZA",
          "Comentario":""
           }]

谢谢大家

【问题讨论】:

  • 您要查找的是json_encoded 字符串。
  • 喜欢 $body = json_encode('xxxxxx')?

标签: php arrays xml string


【解决方案1】:

如果您使用 XML,最好学习和使用 XML 文档 API,例如 DOMDocument

然后您可以像下面这样构建文档,使用json_encode 将有效负载数组编码为 JSON。

<?php
$data = [
    ['Code' => 'DES001', 'Commennte' => '', 'Quantity' => 1, 'Price' => '135.00', 'Unity' => 1]
];

// expected <value><![CDATA...</value> payload
$payload = [
    'Pedido' => [
        'Nombre' => '',
        'Producto' => [
            'Product' => [
                [
                    'ClaveProducto' => $data[0]['Code'],
                    'Cantidad' => $data[0]['Quantity'],
                    'Precio' => $data[0]['Price'],
                    'Unidad' => 'PIEZA',
                    'Comentario' => ''
                ]
            ]
        ]
    ]
];

// init domdocument
$xml = new DOMDocument('1.0', 'UTF-8');

// optional
$xml->preserveWhiteSpace = false;
$xml->formatOutput = true;

// create request wrapper
$request = $xml->createElement('request');

// create method (CDATA), append it to the wrapper
$method = $xml->createElement('method');
$method->appendChild($xml->createCDATASection('registra'));

// create param wrapper
$param = $xml->createElement('param');

// create name (CDATA), append it to the param
$name = $xml->createElement('name');
$name->appendChild($xml->createCDATASection('pedido'));
$param->appendChild($name);

// create value (CDATA), append it to the param
$value = $xml->createElement('value');
$value->appendChild($xml->createCDATASection(json_encode($payload)));
$param->appendChild($value);

// append method to request
$request->appendChild($method);

// append param to request
$request->appendChild($param);

// append request onto doc root
$xml->appendChild($request);

// output
echo $xml->saveXML($xml->documentElement);

生成的 XML 将如下所示:

<request>
  <method><![CDATA[registra]]></method>
  <param>
    <name><![CDATA[pedido]]></name>
    <value><![CDATA[{"Pedido":{"Nombre":"","Producto":{"Product":[{"ClaveProducto":"DES001","Cantidad":"1","Precio":"135","Unidad":"PIEZA","Comentario":""}]}}}]]></value>
  </param>
</request>

在线测试:https://3v4l.org/nUSm5

对于多个它会是这样的:https://3v4l.org/FgrhN

【讨论】:

  • 嗨劳伦斯,谢谢你的回答,它真的对我有帮助,只是忘了一件事,数组$data它是动态的,它可能是x个元素,我怎样才能得到的值$data 如果它们是 2 个或更多元素,则在 $ payload 的另一个数组中
  • np,很高兴它有帮助。如果您有多个,您只需将数据中的项目更改为您需要的结构,然后将其作为一个整体传递3v4l.org/gI3YG
  • @David 请不要移动“球门柱”。当您提出问题时(实际上,在您发布问题之前),请确保您在展示您的 minimal reproducible example 时已充分代表您的项目数据。
猜你喜欢
  • 2023-04-02
  • 1970-01-01
  • 1970-01-01
  • 2020-04-02
  • 2015-06-06
  • 2014-04-03
  • 1970-01-01
  • 1970-01-01
  • 2012-11-28
相关资源
最近更新 更多