2

我有一个数组,其中包含每个值的数组。我怎样才能遍历每个嵌套数组(或任何技术术语)。

这是结构(每个订单可以有多个 order_items)

Array ( [0] => 
         Array ( 
            [order_item] => Array (
                [id] => 1
                [order_id] => 1
                [userid] => 1
                [item_number] => 3
                [itemName] => Item A
                [price] => 1.99
                [quantity] => 1
                [total] => 1.99
                [item_status] => Not Filled
                [created] => 2013-06-13 07:42:00
                [modified] => 2013-06-13 07:42:00
            ) 
            [order_item] => Array (
                [id] => 2
                [order_id] => 1
                [userid] => 1
                [item_number] => 4
                [itemName] => Item B
                [price] => 1.99
                [quantity] => 1
                [total] => 1.99
                [item_status] => Not Filled
                [created] => 2013-06-13 07:42:00
                [modified] => 2013-06-13 07:42:00
                )   
            [Order] => Array (
                [id] => 1
                [userid] => 4
                [order_status] => Not Filled
                [email] => test@gmail.com
                [total] => 1.99
                [fullName] => Test
                [address] => Test
                [city] => Test
                [state] => IA
                [zip] => 12345
                [created] => 2013-06-13 07:42:00
                [modified] => 2013-06-13 07:42:00
            ) 
        ) 
     )

每个订单可以有多个 order_items。我将这些放入 Excel 电子表格中,因此我想为订单添加标题,如下所示

/* new order */
//this the headings for an order
id    name     date    etc... 
 1    test      123

//this is for each of the items in the order
id    item number   quantity   price  etc..
 1     345             2         1.99
 1     456             1         1.00

/* new order */
//Another order so the headings must be added again
id    name     date    etc...
 2    test      345

//this is for each of the items in the orders
id    item number   quantity   price  etc..
 2     345             1         1.00

需要注意的一件事是,我使用的是 CakePHP 的 PHP excel 导出插件,在此处找到的要导出的数据遵循此结构

$data = array(
        //each of these arrays are rows to be inserted into excel
        array('a', 'b', 'c'),
        array(1, 2, 3),
        array('you', 'and', 'me'),
    );

假设要插入的这个数据数组是 $order_values 并且我要推入的数组是 $data

$data = array();
foreach($order_values as $order){

    //Order headings go here
    array_push($data, array('Order ID', 'Order total', etc...))

    //order data here. There is always only 1 line of order data per order
    array_push($data, $order[Order]['id'], order[Order]['item_number']..);

    //order items headings go here
    array_push($data, array('Item number', 'Item Price', etc..));

     foreach(){
          array_push($data, /*now add the order items for the specific order*/)
     }
}

我怎样才能做到这一点?

4

1 回答 1

0

你给我们展示的数组在现实中是不存在的。每个数组键必须是唯一的,否则将被覆盖。你order_item多次使用。你可以做的是:

Array ( [0] => 
     Array ( 
        [order_items] => Array (
            Array ( [id] => 1 [order_id] => 1 [userid] => 1 [item_number] => 3 [itemName] => Item A [price] => 1.99 [quantity] => 1 [total] => 1.99 [item_status] => Not Filled [created] => 2013-06-13 07:42:00 [modified] => 2013-06-13 07:42:00 ) ,
            Array ( [id] => 2 [order_id] => 1 [userid] => 1 [item_number] => 4 [itemName] => Item B [price] => 1.99 [quantity] => 1 [total] => 1.99 [item_status] => Not Filled [created] => 2013-06-13 07:42:00 [modified] => 2013-06-13 07:42:00 )
        ),
        [Order] => Array ( [id] => 1 [userid] => 4 [order_status] => Not Filled [email] => test@gmail.com [total] => 1.99 [fullName] => Test [address] => Test [city] => Test [state] => IA [zip] => 12345 [created] => 2013-06-13 07:42:00 [modified] => 2013-06-13 07:42:00 ) 
    ) 
 )

(这可能不完全是印刷品的样子,但你明白了)

然后你可以使用你的伪代码

$data = array();
foreach($order_values as $order){

    array_push($data, array('Order ID', 'Order total', etc...)) //Order headings go here

    array_push($data, $order[Order]['id'], order[Order]['item_number']..); //order data here. There is always only 1 line of order data per order

    array_push($data, array('Item number', 'Item Price', etc..)); //order items headings go here

     foreach($order['order_items'] as $order_item){
          array_push($data, //now add the order items for the specific order)
     }
}
于 2013-06-14T06:17:29.060 回答