多维数组推送/添加?

发布于 2024-12-02 07:01:37 字数 4414 浏览 0 评论 0原文

我想创建类似以下数组的内容

[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”,它将创建一个新的 [Schedule_Date_Group] =>大批 ( [日程_日期] =>大批 ( [2011 年 9 月 16 日星期五] =>大批 ( 所有子内容都应位于该新内容下。 所以我最终会得到

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

等等......

有什么帮助吗?

I want to create something like the following 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] => 
                                    )

                            )

                    )

            )

But I have a few issues, first the array seems to be getting created with a preceding # for the first value. Example

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

And my arrays are not pushing it under the Date Array ([Friday, September 16, 2011] => Array) They are just being added to the end as a normal array. Example

[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] => 
            )

    )

How can I fix these two issues. They are again, #'s preceding the Schedule_Date_Group array and the sub arrays being added to the end rather then nested under the date group array.

PHP For the main schedule item and date group part

$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 for the sub menu items

$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));

It is being looped through so there is no way for me to just create a giant array. And if a new "Schedule Date" is set it will create a new [Schedule_Date_Group] => Array
(
[Schedule_Date] => Array
(
[Friday, September 16, 2011] => Array
(

and all the sub content should go under that new one.
So I would end up with

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

etc...

Any help?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

苏别ゝ 2024-12-09 07:01:37

首先,像这样使用一个巨大的数组来手动生成一些 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>";

Firstly, using a huge array to manually generate some XML like this is not the way to do it. Use something like XMLWriter or DOM instead, then you can build your document on the fly as you obtain your data. However, if you really want to, or are forced to do it like this, read on...


Secondly, what you are trying to do cannot be done. This is because you want use the same array key for multiple entries which won't work - you will just end up overwriting your previous entry.

Thirdly, your numeric keys are appearing because you are using $xml[] (array_push() behaves in the same way) and it will always add a numeric key because you have not told it what you want your text key to be.

Fourthly, your extra items are being added to the outer level of the array because that is what you have told PHP to do. $xml[] will always add a new key to the outer level of the $xml variable because you have not told PHP you are dealing with an inner array.

Your structure needs to be more like this:

$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( ... ),
    ...
  ),
  ...
);

...and you can push new items onto specific days like this:

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

Then you can loop through it and turn it into XML with something like this:

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>";
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文