What about...
array_walk($array, function(&$v,$k,&$a) {
if(count(preg_grep('~'.preg_quote($v,'~').'~i',$a))>1)unset($a[$k]);
},&$array);
edit:
I tested this in php 5.3.22, and passing the function reference was removed 5.4, as suggested by OP, here is 5.4 + alt:
array_walk($array, function (&$v, $k) use (&$array) {
if(count(preg_grep('~'.preg_quote($v,'~').'~i', $array))>1)unset($array[$k]);
});