Въпреки че можете да генерирате желания масив в един цикъл, аз предпочитам да изпълня две заявки. Първо извлечете всички марки в масив и добавете празен масив от продукти към всяка марка. След това вземете всички продукти и ги присвоете на свързаната марка.
Тъй като не знам каква DB библиотека използвате, ето някакъв псевдокод:
$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;
}