Ciao, se ho ben capito forse potresti risolvere in questo modo:
ad ogni chiave del tuo array (quindi la categoria del db) devi far corrispondere un array composto da 2 chiavi valori, la prima chiave sarà categorie, alla quale fai corrispondere eventualmente le categorie che ne fanno parte, alla seconda chiave fai corrispondere i prodotti che sono associati alla categoria.
Es.
Codice PHP:
$array = array (
'cat1' => array (
'prodotti' => array (
'prodotto1' ),
'categorie' => array (
'cat2' => array (
'prodotti' => array (
'prodotto2',
'prodotto3' ),
'categorie' => array (
'cat3' => array (
'prodotti' => array (
'prodotto4' ),
'categorie' => array () ) ) ) ) ) );
Quindi ad ogni categoria corrisponde un array contenente i prodotti e le sottocategorie.