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

报告相同问题?

悬赏问题

  • ¥20 软件测试决策法疑问求解答
  • ¥15 win11 23H2删除推荐的项目,支持注册表等
  • ¥15 matlab 用yalmip搭建模型,cplex求解,线性化处理的方法
  • ¥15 qt6.6.3 基于百度云的语音识别 不会改
  • ¥15 关于#目标检测#的问题:大概就是类似后台自动检测某下架商品的库存,在他监测到该商品上架并且可以购买的瞬间点击立即购买下单
  • ¥15 神经网络怎么把隐含层变量融合到损失函数中?
  • ¥15 lingo18勾选global solver求解使用的算法
  • ¥15 全部备份安卓app数据包括密码,可以复制到另一手机上运行
  • ¥20 测距传感器数据手册i2c
  • ¥15 RPA正常跑,cmd输入cookies跑不出来