Соответствие строк

Я хочу получить имена столбцов из запроса SQL CREATE.

Запрос:

CREATE TABLE 'test' ( 'col1' INT( 10 ) NOT NULL , 'col2' VARCHAR( 50 ) NOT NULL , 'col3' DATE NOT NULL ) ENGINE = MYISAM ; 

Код:

 preg_match_all("/'(.+)' (\w+)\(? ?(\d*) ?\)?/", $sql, $_matches, PREG_SET_ORDER); 

Вывод:

 Array ( [0] => Array ( [0] => 'col1\' INT( 10 ) [1] => col1\ [2] => INT [3] => 10 ) [1] => Array ( [0] => 'col2\' VARCHAR( 50 ) [1] => col2\ [2] => VARCHAR [3] => 50 ) [2] => Array ( [0] => 'col3\' DATE [1] => col3\ [2] => DATE [3] => ) ) 

Но мне нужен простой результат:

 array( array('INT( 10 )', 'col1'), array('VARCHAR( 50 )', 'col2'), array('DATE', 'col3') ); 

Все возможные решения будут оценены. благодаря

 $sql = <<<SQL CREATE TABLE 'test' ( 'col1' INT( 10 ) NOT NULL , 'col2' VARCHAR( 50 ) NOT NULL , 'col3' DATE NOT NULL ) ENGINE = MYISAM ; SQL; preg_match_all("/'(.+)' (\w+(?:\( ?\d* ?\))?)/", $sql, $matches, PREG_SET_ORDER); $matches = array_map(function($array) { return array($array[2], $array[1]); }, $matches); var_dump($matches); 

Вывод

 array(3) { [0]=> array(2) { [0]=> string(9) "INT( 10 )" [1]=> string(4) "col1" } [1]=> array(2) { [0]=> string(13) "VARCHAR( 50 )" [1]=> string(4) "col2" } [2]=> array(2) { [0]=> string(4) "DATE" [1]=> string(4) "col3" } } 

Повторное использование существующего запроса из предыдущего ответа:

 preg_match_all("/'(.+)' ((\w+)\(? ?(\d*) ?\)?)/", $sql, $_matches, PREG_SET_ORDER); $matches = array_map(function($v) {return array(trim($v[2]), $v[1]);}, $_matches);