vladislav997, чтобы в
print_r($var);
не дублировались посты нужно воспользоваться инъекцией зависимостей и обязательно подключить пару серьезных библиотек, например, AR/ORM.
Если серьезно, путей решения того, что хотите сделать, очень много. Проще всего — группировать, что в каком-то смысле и делают ORM, где сразу доступно $user->posts. Группировать можно и на уровне запроса к базе, и на уровне кода. Например.
$vars = [];
foreach($posts as $post)
$vars[$post->author_id][] = $post->name;
print_r($vars); // теперь у Вас записи группированы по пользователю, делайте что хочется,
// например:
foreach ($users as $user)
if (isset($vars[$user->id]))
print_r(implode(', ', $vars[$user->id]));
— вообще, есть правило, старайтесь избегать двойного обхода массивов. А в данном случае Вы дважды обходили $posts внутри перебора $users.