@Alexander_Webov

Как вывести данные из двух массивов?

Дан массив:

$arr= [
	'authors' =>[
			['fio' => 'Пушкин А. С.', 'email' => 'pushkin@mail.ru',],
			['fio' => 'Тютчев Ф. И.', 'email' => '123@mail.ru',],
		],
	'books' =>[
			['nameBook' => 'Снегурочка', 'email' => 'pushkin@mail.ru',],
			['nameBook' => 'Туман',	'email' => '123@mail.ru',],
		],

];

Задача вывести в html:

<p>Книга <b><название книги></b>, ее написал<b> <автор> </b>email автора <b><email автора></b></p>

Я понимаю что нужно вывести через foreach:

<?php foreach ($arr as  $v) : ?>
	<p>Книга <?= $v[0]['nameBook'] ?>, ее написал <?= $v[0]['fio'] ?> email автора <?= $v[0]['email'] ?>
<?php endforeach; ?>

Эта пример плохой пример, пробовал и двойной foreach и for[$i] и еще с 10 вариантов.

Как правильно его вывести, чтобы все было на своих местах?
  • Вопрос задан
  • 155 просмотров
Решения вопроса 1
0xD34F
@0xD34F
echo implode('', array_map(function($author, $book) {
  return '<p>Книга '.$book['nameBook'].', ее написал '.$author['fio'].', '.$author['email'].'</p>';
}, $arr['authors'], $arr['books']));
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
rozhnev
@rozhnev Куратор тега PHP
Fullstack programmer, DBA, медленно, дорого
Вот такой вариант возможен:
// переформатируем авторов в формат email => author
$arr["authors"] = array_reduce(
    $arr["authors"], 
    function($res, $el) {
        $res[$el["email"]] = $el["fio"]; 
        return $res;
    }, 
    []
);
// в цикле генерируем HTML
foreach($arr["books"] as $book ) {
	echo $book["nameBook"] . 
		', ее написал ' . $arr["authors"][$book["email"]] .
		' email автора: ' . $book["email"] . PHP_EOL;
}


Share PHP code
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы