doufu7835 2017-04-06 07:38
浏览 45
已采纳

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

I am trying to create a multidimensional array that is strictly based on this xml template (structure):

<invoice>
    <type></type>
    <transport></transport>
    <items>
        <item-ordered>
            <name></name>
            <quantity></quantity>
        </item-ordered>
    </items>
</invoice>

I am a php newbie, so i tried to solve it using basic knowledge of 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
)

but I run into a problem when trying to use a variable/array name that includes a dash(hyphen).

So my 1st question is whether my solution is right. If it is than I would like to know how do I deal with that hyphen issue. The final array should have exactly the same structure as the XML file showed above, I cannot change the XML file itself.

  • 写回答

1条回答 默认 最新

  • douhuan9289 2017-04-06 08:02
    关注

    use $item_ordered as a variable name or any other name, but don't use a normal serialization with serialize($item_ordered) function, you have to serialize the array by your self and write the XML in a way that you change the root node "item_ordered" to "item-ordered"...you can take a look at PHP Array Serialization on this link http://php.net/manual/en/function.serialize.php#109953, or simply serialize it and use str_replace to change the node's name in the serialized result, so the code should look like this:

        $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);
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 微信小程序协议怎么写
  • ¥15 c语言怎么用printf(“\b \b”)与getch()实现黑框里写入与删除?
  • ¥20 怎么用dlib库的算法识别小麦病虫害
  • ¥15 华为ensp模拟器中S5700交换机在配置过程中老是反复重启
  • ¥15 java写代码遇到问题,求帮助
  • ¥15 uniapp uview http 如何实现统一的请求异常信息提示?
  • ¥15 有了解d3和topogram.js库的吗?有偿请教
  • ¥100 任意维数的K均值聚类
  • ¥15 stamps做sbas-insar,时序沉降图怎么画
  • ¥15 买了个传感器,根据商家发的代码和步骤使用但是代码报错了不会改,有没有人可以看看