多维阵列推送/添加?

时间:2011-08-30 16:34:54

标签: php arrays multidimensional-array

我想创建类似下面的数组

[Schedule_Date_Group] => Array
            (
                [Schedule_Date] => Array
                    (
                        [Friday, September 16, 2011] => Array
                            (
                                [Schedule_Item] => Array
                                    (
                                        [nid] => 763
                                        [time] => 1:15 PM
                                        [title] => What a Publisher Does: 5 Reasons Why You Need a...
                                        [event_type] => events
                                        [length] => 
                                        [movie_type] => 
                                        [details] => 
                                    )

                                [Schedule_Item] => Array
                                    (
                                        [nid] => 763
                                        [time] => 1:15 PM
                                        [title] => What a Publisher Does: 5 Reasons Why You Need a...
                                        [event_type] => events
                                        [length] => 
                                        [movie_type] => 
                                        [details] => 
                                    )

                            )

                    )

            )

但是我有一些问题,首先,数组似乎是用前面的#为第一个值创建的。实施例

[7] => Array
    (
        [Schedule_Date_Group] => Array
            (

我的数组并没有在日期数组([Friday, September 16, 2011] => Array)下推送它们。它们只是作为普通数组添加到最后。实施例

[7] => Array
    (
        [Schedule_Date_Group] => Array
            (
                [Schedule_Date] => Array
                    (
                        [Friday, September 16, 2011] => Array
                            (
                                [Schedule_Item] => Array
                                    (
                                        [nid] => 763
                                        [time] => 1:15 PM
                                        [title] => What a Publisher Does: 5 Reasons Why You Need a...
                                        [event_type] => events
                                        [length] => 
                                        [movie_type] => 
                                        [details] => 
                                    )

                            )

                    )

            )

    )

[8] => Array
    (
        [Schedule_Item] => Array
            (
                [nid] => 764
                [time] => 1:30 PM
                [title] => Navigating the Road to Licensing Music For Your...
                [event_type] => events
                [length] => 
                [movie_type] => 
                [details] => 
            )

    )

如何解决这两个问题。它们又是#在Schedule_Date_Group数组之前,子数组被添加到结尾而不是嵌套在日期组数组下。

PHP主要计划项目和日期组部分

$xml[] = array("Schedule_Date_Group" => array("Schedule_Date" => array($pretty_date => array("Schedule_Item" => array("nid" => $do['nid'], "time" => $pretty_time, "title" => $title, "event_type" => $do['field_event_type_value'], "length" => $do['field_length_value'], "movie_type" => $do['field_movie_type_value'], "details" => $schedule_details)))));

子菜单项的PHP

$xml[] = array("Schedule_Item" => array("nid" => $do['nid'], "time" => $pretty_time, "title" => $title, "event_type" => $do['field_event_type_value'], "length" => $do['field_length_value'], "movie_type" => $do['field_movie_type_value'], "details" => $schedule_details));

它正在循环中,因此我无法创建一个巨大的阵列。如果设置了新的“计划日期”,它将创建一个新的[Schedule_Date_Group] => Array ( [Schedule_Date] => Array ( [Friday, September 16, 2011] => Array ( 并且所有子内容都应该在新的内容之下。 我最终会以

结束
DATE
 - Schedule_Item 1
 - Schedule_Item 2
 - Schedule_Item 3
 - Schedule_Item 4
New Date
 - Schedule Item 5
 - Schedule Item 6

等...

任何帮助?

1 个答案:

答案 0 :(得分:1)

首先,使用庞大的数组来手动生成一些像这样的XML并不是这样做的。使用XMLWriterDOM之类的内容,然后您可以在获取数据时动态构建文档。但是,如果您真的想要或者被迫这样做,请继续阅读......


其次,你要做的事情是做不到的。这是因为您希望对多个条目使用相同的数组键,这些条目不起作用 - 您最终将覆盖之前的条目。

第三,您的数字键出现是因为您正在使用$xml[](array_push()以相同的方式运行)并且它总是会添加一个数字键,因为您还没有告诉它您想要的文本键是什么是

第四,你的额外项目被添加到数组的外层,因为这是你告诉PHP要做的事情。 $xml[]将始终向$xml变量的外层添加一个新键,因为您没有告诉PHP您正在处理内部数组。

你的结构需要更像这样:

$scheduleDateGroup = array (
  'Friday, September 16, 2011' => array (
    // These are your schedule items...
    0 => array( ... ),
    1 => array( ... ),
    2 => array( ... ),
    ...
  ),
  'Saturday, September 17, 2011' => array (
    0 => array( ... ),
    1 => array( ... ),
    2 => array( ... ),
    ...
  ),
  ...
);

...您可以将新项目推送到特定日期:

$scheduleDateGroup[$date][] = array( ... );

然后你可以循环遍历它并将其转换为XML,如下所示:

echo "<Schedule_Date_Group>\n";
foreach ($scheduleDateGroup as $day => $schedules) {
  echo "  <Schedule_Date date=\"$day\">\n";
  foreach ($schedules as $item) {
    echo "    <Schedule_Item";
    foreach ($item as $attr => $value) echo " $attr=\"$value\"";
    echo " />\n";
  }
  echo "  </Schedule_Date>\n";
}
echo "</Schedule_Date_Group>";