PHP动态多维数组,其名称中包含连字符

时间:2017-04-06 07:38:32

标签: php arrays multidimensional-array syntax

我正在尝试创建一个严格基于此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文件本身。

1 个答案:

答案 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);