There are a lot of capture groups, and some can also be omitted if you don't need them for after processing.
The issue is that for +32 16-894477 you are not matching the hyphen, and you match the larger string as there are no boundaries set so you get a partial match.
Some notes:
- You don't have to escape the /when using a different delimiter
- You can omit {1}from the pattern
- \scan also match a newline, you can use- \hif you want to match a horizontal whitespace char
- A single space [ ]does not have to be in a character class
You can extend the pattern with adding the hyphen and forward slash to a character class using [/-]?, wrap the whole pattern in a non capture group  and assert a whitspace boundary to the right  (?:whole pattern here)(?!\S)
A version without the capture groups for a match only:
(?:(?:(?:\+|00)32\h?(?:\(0\)\h?)?|0)(?:4(?:60|[789]\d)/?(?:\h?\d{2}\.?){2}\h?\d{2}|(?:\d/?\h?\d{3}|\d{2}[/-]?\h?\d{2})(?:\.?\h?\d{2}){2}))(?!\S)
Regex demo | Php demo
Php example
$re = '~(?:(?:(?:\+|00)32\h?(?:\(0\)\h?)?|0)(?:4(?:60|[789]\d)/?(?:\h?\d{2}\.?){2}\h?\d{2}|(?:\d/?\h?\d{3}|\d{2}[/-]?\h?\d{2})(?:\.?\h?\d{2}){2}))(?!\S)~';
$str = 'OK 01/07 - 31/07  
OK 0487207339
OK +32487207339
OK 01.07.2016
OK +32 (0)16 89 44 77
OK 016894477
OK 003216894477
OK +3216894477
OK 016/89.44.77
OK +32 16894477
OK 0032 16894477
OK +32 16/894477
NOK +32 16-894477 (this should match)
OK 0479/878810
NOK 20150211-0001731015-1 (this shouldn\'t match)';
preg_match_all($re, $str, $matches);
print_r($matches[0]);
Output
Array
(
    [0] => 0487207339
    [1] => +32487207339
    [2] => +32 (0)16 89 44 77
    [3] => 016894477
    [4] => 003216894477
    [5] => +3216894477
    [6] => 016/89.44.77
    [7] => +32 16894477
    [8] => 0032 16894477
    [9] => +32 16/894477
    [10] => +32 16-894477
    [11] => 0479/878810
)