<?php
$array = array(
	array('nom' => 'a', 'cat' => '1'),
	array('nom' => 'b', 'cat' => '2'),
	array('nom' => 'c', 'cat' => '1'),
	array('nom' => 'd', 'cat' => '3'),
	array('nom' => 'e', 'cat' => '1')
);
$categorias = array();

foreach ($array as $arr)
	$categorias[] = $arr['cat'];

$categorias = array_unique($categorias);
$total = count($categorias);
$final = array();

for ($i = 1; $i <= $total; $i++)
	foreach ($array as $arr)
		if ($arr['cat'] == $i)
			$final[$i][] = $arr;

foreach ($final as $numero => $registro){
	echo 'Categoría ' . $numero . "\n";
	foreach ($registro as $datos)
		echo 'Nombre: ' . $datos['nom'] . "\n";
	echo "\n";
}