Многомерный массив Push / Adding? - PullRequest
0 голосов
/ 30 августа 2011

Я хочу создать что-то вроде следующего массива

[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 Ответ

1 голос
/ 30 августа 2011

Во-первых, использование огромного массива для ручной генерации 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>";
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...