<?php

// в preg_replace можно использовать массивы, что бы не делать over9k циклов foreach
$regExp = '/^\\W*(([+]\\s*7)|8)(\\W*[0-9]){10}\\W*$/ui'; //регулярка для правильного номера 
$pattern = array ('/\\W*/u', '/^8|^7/'); // массив из Р.В. для: 1) поиск \W 2) !!затем!! поиск 8 или 7 в начале строки
$replacement = array ('','+7'); // чистим строку от мусора, а 8 (или 7) в начале, заменяем на +7
$val; // операционная переменная
$pureNumbers = array(); // массив куда сложим чистые номера
$correctNumbers = array ( 
  '84951234567',  '+74951234567', '8-495-1-234-567', 
  ' 8 (8122) 56-56-56', '8-911-1234567', '8 (911) 12 345 67', 
  '8-911 12 345 67', '8 (911) - 123 - 45 - 67', '+ 7 999 123 4567', 
  '8 ( 999 ) 1234567', '8 999 123 4567'
);
foreach($correctNumbers as $value) { // перебираем номера
	if (preg_match($regExp, $value)) { // отделяем зерна от плевел, зерна подлежат обработке
		$val = preg_replace ($pattern, $replacement, $value); //чистим вилкой наш номер и приводим к одному виду
		$pureNumbers[] = $val; // записываем обработанный номер в массив
	}
}

print_r($pureNumbers); //Ура!!!!

