我正在尝试创建一个严格基于此xml模板(结构)的多维数组:
<invoice>
<type></type>
<transport></transport>
<items>
<item-ordered>
<name></name>
<quantity></quantity>
</item-ordered>
</items>
</invoice>
我是一个php新手,所以我尝试使用php的基本知识来解决它:
//This is from where I get all data for populating my XML/array structure
$products = $params['order']->getProducts();
$prName = array_column($products, 'product_name');
$prQuantity = array_column($products, 'product_quantity');
//Populating arrays with data
$item-ordered = array();
$items = array();
for($i = 0; $i < count($products); $i++) {
$item-ordered = array (
"name" => $prName[$i],
"quantity" => $prQuantity[$i]
);
array_push($items,$item-ordered); //using a hyphen appears to be invalid
)
$invoice = array (
"type" => "code:INVOICE",
"transport" => $customerTransport,
"items" => $items
)
但是在尝试使用包含破折号(连字符)的变量/数组名称时遇到了问题。
所以我的第一个问题是我的解决方案是否正确。如果它比我想知道如何处理该连字符问题。最终的数组应该与上面显示的XML文件具有完全相同的结构,我无法更改XML文件本身。
答案 0 :(得分:0)
使用 $ item_ordered 作为变量名称或任何其他名称,但不要使用带serialize($item_ordered)
函数的常规序列化,您必须自行序列化数组并且以改变根节点的方式编写XML&#34; item_ordered&#34; to&#34; item-ordered&#34; ...您可以在此链接http://php.net/manual/en/function.serialize.php#109953上查看PHP数组序列化,或者只是序列化它并使用str_replace
更改节点&#39;序列化结果中的名称,因此代码应如下所示:
$item_ordered = array();
$items = array();
for($i = 0; $i < count($products); $i++) {
$item_ordered = array (
"name" => $prName[$i],
"quantity" => $prQuantity[$i]
);
array_push($items,
str_replace("item_ordered", "item-ordered", serialize($item_ordered)));
}
echo serialize($items);