Bien que vous puissiez générer le tableau souhaité en une seule boucle, je préfère exécuter deux requêtes. Récupérez d'abord toutes les marques dans un tableau et ajoutez un tableau de produits vide à chaque marque. Ensuite, récupérez tous les produits et attribuez-les à la marque associée.
Comme je ne sais pas quelle bibliothèque de base de données vous utilisez, voici une sorte de pseudo-code :
$data = [];
$brandResult = $db->query("SELECT id, name FROM tbl_brand");
while ($row = $brandResult->fetchObject()) {
$row->product_names = [];
$data[$row->id] = $row;
}
$productResult = $db->query("SELECT id, brand_id, p_name FROM tbl_products");
while ($row = $productResult->fetchObject()) {
$data[$row->brand_id][$row->id] = $row->p_name;
}