Ты вполне правельное напавление взял, но поленился додумать... Только не for, а foreach.
Но всёже проще usort:
function cmp($a, $b) {
$a = explode('::', $a);
$b = explode('::', $b);
if ($a[1] == $b[1]) { return 0; }
return ($a[1] > $b[1])?1:-1;
}
usort($array, "cmp");
Не проверял, но должно работать...