我想创建类似下面的数组
[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
等...
任何帮助?
答案 0 :(得分:1)
首先,使用庞大的数组来手动生成一些像这样的XML并不是这样做的。使用XMLWriter或DOM之类的内容,然后您可以在获取数据时动态构建文档。但是,如果您真的想要或者被迫这样做,请继续阅读......
其次,你要做的事情是做不到的。这是因为您希望对多个条目使用相同的数组键,这些条目不起作用 - 您最终将覆盖之前的条目。
第三,您的数字键出现是因为您正在使用$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>";