【问题标题】:Looping through array keys with PHP使用 PHP 循环遍历数组键
【发布时间】:2013-06-14 04:51:09
【问题描述】:

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

这是结构(每个订单可以有多个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 found here 使用 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*/)
     }
}

我怎样才能做到这一点?

【问题讨论】:

  • 您的第二级向下数组是否实际上包含多个名为“order_item”的不同元素以及“Order”元素?
  • 您的伪 php 代码很难理解。您实际上是否尝试过编写此代码?发生了什么?你能发布你的代码和结果吗?

标签: php arrays loops


【解决方案1】:

您向我们展示的数组在现实中是不存在的。每个数组键必须是唯一的,否则将被覆盖。您多次使用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)
     }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-11-23
    • 2011-05-23
    • 2012-11-14
    • 2011-04-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-10
    相关资源
    最近更新 更多