Двумерный массив PHP не выводится правильно

0

У меня есть следующий набор дат и мест - в основном каждая дата должна будет содержать несколько мест. Я пытаюсь отобразить массив ниже в виде следующего формата:

20140411
Бейсингстоук
Salisbury

20140405
Бейсингстоук

20140419
Salisbury

... и так далее

Массив:

Array
(
    [20140411] => Array
        (
            [0] => Array
                (
                    [0] => Basingstoke
                )

            [1] => Array
                (
                    [0] => Salisbury
                )

        )

    [20140405] => Array
        (
            [0] => Array
                (
                    [0] => Basingstoke
                )

        )

    [20140419] => Array
        (
            [0] => Array
                (
                    [0] => Salisbury
                )

        )

    [20140427] => Array
        (
            [0] => Array
                (
                    [0] => Basingstoke
                )

        )

)

Я считаю, что я близко, но у меня всегда был какой-то ментальный блок, когда дело доходило до работы с массивами/ключами и т.д. Я пытаюсь сделать вложенный цикл foreach, который отображает даты отлично, но я просто получаю "Массив" "выводится для местоположений:

foreach ($dates as $date => $dateKey) {

    // Format the date
    $theDate = DateTime::createFromFormat('Ymd', $date);
    $theFormattedDate = $theDate->format('d-m-Y');

    echo '<h4>'.$theFormattedDate.'</h4>';

    foreach ($dateKey as $key => $venue) {
        echo $venue;
    }

}

Может ли кто-то определить, где я здесь ошибся?

РЕДАКТИРОВАТЬ:

Здесь создаются массивы, если это помогает?

$dates = array();

while ( have_rows('course_date') ) : the_row(); 
    $theVenue = get_sub_field('venue');

    // Use the date as key to ensure values are unique
    $dates[get_sub_field('date')][] = array(
        $theVenue->post_title
    );
endwhile; 
  • 0
    echo $ venue [0]; переменная $ venue представляет собой массив из одного элемента
  • 0
    Если возможно, вы должны исправить способ, которым вы получаете данные, вы, кажется, делаете слишком много циклов.
Показать ещё 4 комментария
Теги:

2 ответа

5
Лучший ответ

В вашем случае местом является массив.
Это всегда массив с единственным элементом, который вы можете указать как [0].
Таким образом,...

foreach ($dates as $date => $dateKey) {

    // Format the date
    $theDate = DateTime::createFromFormat('Ymd', $date);
    $theFormattedDate = $theDate->format('d-m-Y');

    echo '<h4>'.$theFormattedDate.'</h4>';

    foreach ($dateKey as $key => $venue) {
        echo $venue[0];
    }

}

Или, если вы можете иметь несколько мест в этом массиве последнего уровня, вы можете переписать внутренний foreach, добавив еще один:

foreach ($dates as $date => $dateKey) {

    // Format the date
    $theDate = DateTime::createFromFormat('Ymd', $date);
    $theFormattedDate = $theDate->format('d-m-Y');

    echo '<h4>'.$theFormattedDate.'</h4>';

    foreach ($dateKey as $key => $venues) {
        foreach($venues as $v) {
           echo $v;
        }
    }
}
  • 2
    Я думаю, что у него там может быть много мест, поэтому это массив, если хотя бы в двух местах он не будет работать должным образом. РЕДАКТИРОВАТЬ: у него есть 2 места, и каждое в отдельном массиве ... так неправильно.
  • 0
    @ Linek я так не думаю - см. 1-й элемент в его массиве.
Показать ещё 4 комментария
3

Места вложены на один уровень глубже, вам нужен еще один foreach.

Ничего, другой парень сказал, что этот плагин должен работать так:

  • 0
    На самом деле, Линек, я изменил код до того, что вы имели до удаления кода, и в результате получил более чистый массив !! Так что спасибо за это! Я должен был принять ответ Олега, но вы получаете +1 от меня :). Теперь мне просто нужно найти хороший ресурс, чтобы узнать о работе с массивами - в настоящее время моя слабость!

Ещё вопросы

Сообщество Overcoder
Наверх
Меню