I am while using following code make it possible for an if/else statement.

$types = array('.pdf', '.doc', '.xls');
$filename = array(get_post_meta($post->ID, 'mjwlink-url', TRUE));
if(0 < count(array_intersect(array_map('strtolower', $filename), $types))) {
   echo 'One';
} else {
   echo var_dump($filename);

The issue I've is the fact that get_publish_meta always returns an assortment within the format even if $single is placed to true

array(1) { [0]=> string(34) "http://www.crimeandjustice.org.uk/" }

Any help appreciated.

It always returns an assortment since you are performing the get_post_meta function within the array language construct. Based on the Wordpress Codex get_post_meta will not return an assortment when the third param is placed to true. Therefore, swap:

$filename = array(get_post_meta($post->ID, 'mjwlink-url', TRUE));


$filename = get_post_meta($post->ID, 'mjwlink-url', TRUE);

Just from curiosity, the logic inside the if statement is only going to focus on an assortment, should you take away the array make your if statement will fail.