Запутался в многомерных массивах, хэлп))

134
30 декабря 2019, 17:30

Проблема такая, есть многомерный массив, с двумя ключами AUTHORS и BOOKS, в этих ключах еще вложены массивы, ключами для авторов являются их емэйлы чтобы на основе email автора у книги можно было получить автора

Вот собственно говоря код:

$result3 = [
 'AUTHORS' => [
    'pasha12316@ya.ru'=>[
        'fio' => 'Pavel Kharchenko',
        'email_author' => 'pasha12316@ya.ru',
        'year_of_birth' => '1990'
    ],
    'alex6@ya.ru'=>[
        'fio' => 'Alex York',
        'email_author' => 'alex6@ya.ru',
        'year_of_birth' => '1991'
    ],
    'antony@ma.ru'=>[
        'fio' => 'Anton Svyaz',
        'email_author' => 'antony@ma.ru',
        'year_of_birth' => '1992'
    ]
],

'BOOKS' => [
    'pasha12316@ya.ru'=>[
        'title' => 'Progressive',
        'email_book' => 'pasha12316@ya.ru'
    ],

    'alex6@ya.ru'=>[
        'title' => 'Interactive',
        'email_book' => 'alex6@ya.ru'

    ],

    'antony@ma.ru'=>[
        'title' => 'Combination',
        'email_book' => 'antony@ma.ru'
      ]
    ]
   ];

Итогом всего, я хочу вывести по порядку в цикле информацию про книги и авторов: Существует книга "title", автор ее "fio", родился "year_of_birth"

т.к у меня 3 автора и 3 книги, результат должен расположится на 3х строках

Я вывел всю информацию в двух разных циклах

    foreach ($result3['BOOKS'] as $keys =>&$values) {
    foreach ($values as $key=>&$value) {
        print_r($value);
        echo "<br/>";
        echo "<br/>";
       }
   }

  foreach ($result3['AUTHORS'] as $keys =>&$values) {
      foreach ($values as $key=>&$value) {
          print_r($value);
          echo "<br/>";
          echo "<br/>";
      }
  }

вроде эффект дало, вывелось все что есть в массиве, но не могу вытащить их для вывода html разметку Выводить поэлементно, используя просто поиск в виде $array[0][1] и так 10 строк неправильно будет (а если там 500 авторов и 500 книг) уже долго сижу над этим, прошу помощи ))

Answer 1

Если я понял правильно, то получайте значения по ключу.

Также можно изменить логику массива, убрать лишний элемент email_author и email_book. Вместо них будет выступать ключ.

// Я уменьшил количество данных для более упрощенного чтения кода.
$results = [
   'AUTHORS' => [
       'pasha12316@ya.ru' => [
           'fio' => 'Pavel Kharchenko',
           'year_of_birth' => '1990'
       ]
   ],
   'BOOKS' => [
       'pasha12316@ya.ru' => [
           'title' => 'Progressive',
       ]
    ]
];

Для их вывода будем использовать ключи.

// Для начала выведем авторов
foreach ($results['AUTHORS'] as $email => $info) {
    echo "<p><span>$email</span> " . $info['fio'] . $info['year_of_birth'] . "</p>";
}
// Затем книги
foreach ($results['BOOKS'] as $email => $info) { 
    echo "<p><span>$email</span> " . $info['title'] . "</p>";
}

Можно также структуру данных таким образом, сделать вместо поиска по ключу, простой перебор массива (списка) со вложенным списком книг.

$results = [
    [
        'name' => 'Pavel Kharchenko',
        'email' => 'pasha12316@ya.ru',
        'born' => 1990,
        'books' => [
            [
                'title' => 'Progressive',
                'written' => 2012 // Добавил ещё один элемент для примера.
            ]
        ]
    ]
];

А затем перебрать его таким образом

foreach ($results as $entry) {
    echo "<p>Author: " . $entry['name'] . "</p>";
    echo "<p>Email: " . $entry['email'] . "</p>";
    echo "<p>Was born in: " . $entry['born'] . "</p>";
    echo "<p>Books:</p>";
    echo "<ul>";
    foreach ($entry['books'] as $book) {
        echo "<li><p>" . $book['title'] . " written in " . $book['written'] . "</p></li>";
    }
    echo "</ul>";
}

Обновлено по комментарию

foreach ($results as $author) {
    foreach ($author["books"] as $book) {
        echo "<p>Книга " . $book['title'] . ", её написал " . $author['name'] . " " . $author['born'] . " (" . $author['email'] . ")</p>";
    }
}
Answer 2
foreach($result3['BOOKS'] as $email => $book) {
    echo $book['title'];
    echo "<br/>";
    $result3['AUTHORS'][$email]['fio'];
    echo "<br/>";
    $result3['AUTHORS'][$email]['year_of_birth'];
}
READ ALSO
Связь в таблице

Связь в таблице

У меня есть две таблицы в БДМне нужно во второй таблице в поле routes_route_id сослаться на поле route_id в первой таблице, но я не могу указать связь...

161
Отправка данных по ajax на контроллер php

Отправка данных по ajax на контроллер php

Делаю тестовое заданиеНеобходимо реализовать гостевую книгу на MVC

168
PHP работа со строками URL

PHP работа со строками URL

Здравствуйте допустим есть страница: https://mysite/profile#access_token=32f4539aeec6311e0d06f2305aeee88fbd9bfc773f885980c40a195672d1fa9247a6177c1746b67c4c779

148
Множественная запись в MySQL

Множественная запись в MySQL

есть таблица в которой редактируются данные и кнопка, по которой это всё сохраняетсяЗапрос изначально выглядел таким образом:

191