array_fileter()
кажется приемлемым здесь, и, вероятно, все еще самый надежный ответ.
Тем не менее, следующее также будет работать, если вы можете гарантировать, что «клейкий» символ еще не существует в строках каждого элемента массива (что было бы задано в большинстве практических обстоятельств - иначе вы бы этого не сделали) возможность отличить клей от фактических данных в массиве):
$array = array('one', '', '', 'four', '', 'six');
$str = implode('-', $array);
$str = preg_replace ('/(-)+/', '\1', $str);