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

注意すべきことの 1 つは、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 に答える