Skip to content
Advertisement

concatenate array values ​into string?

I have this array, is stored in a variable called $ data :

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

)

and i want to add to another variable to send to an API

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

but when i echo $body the result its like this:

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

how can I add the string to have an output like this:

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

thanks to all

Advertisement

Answer

If you’re using XML, it’s better to learn and use an XML document API like DOMDocument.

Then you can build out the document like the following, using json_encode to encode the payload array into 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);

The resulting XML will look like:

<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>

Test online: https://3v4l.org/nUSm5

For multiple it would be some thing like: https://3v4l.org/FgrhN

Advertisement