Während Sie das gewünschte Array in einer einzigen Schleife generieren können, würde ich lieber zwei Abfragen ausführen. Holen Sie zuerst alle Marken in ein Array und fügen Sie jeder Marke ein leeres Produkt-Array hinzu. Holen Sie dann alle Produkte und ordnen Sie sie der entsprechenden Marke zu.
Da ich nicht weiß, welche DB-Bibliothek Sie verwenden, hier eine Art Pseudocode:
$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;
}