@vladislav997

Почему если цикл в цикле, то идёт дублирование?

Подскажите, почему если цикл в цикле, то идёт дублирование постов?

Пример:
foreach($users as $user)
{
    foreach($posts as $post)
    {
        if($post->author_id == $user->id)
        {
                $var .= $post->name;
        }
    }
    print_r($var);
}


Результат:
пост1
пост2
пост1
пост2
пост1
пост2
  • Вопрос задан
  • 160 просмотров
Пригласить эксперта
Ответы на вопрос 1
gscraft
@gscraft
Программист, философ
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.
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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