Q:

php array regular expressions

I am using regular expressions in php to match postcodes found in a string. 
The results are being returned as an array, I was wondering if there is any way to assign variables to each of the results, something like 
$postcode1 = first match found
$postcode2 = second match found

here is my code
$html = "some text here bt123ab and another postcode bt112cd";
preg_match_all("/([a-zA-Z]{2})([0-9]{2,3})([a-zA-Z]{2})/", $html, $matches, PREG_SET_ORDER);

foreach ($matches as $val) {
    echo $val[0]; }

I am very new to regular expressions and php, forgive me if this is a stupid question.
Thanks in advance

A:

Update: In order to make this example work, you have to use PREG_PATTERN_ORDER instead of PREG_SET_ORDER (I thought you used it in your code, but obviously I read too fast ;)):

PREG_PATTERN_ORDER
  Orders results so that $matches[0] is an array of full pattern matches, $matches[1] is an array of strings matched by the first parenthesized subpattern, and so on. 

If you really want to, you can assign them to variables:
$postcode1 = $matches[0][0];
$postcode2 = $matches[0][1];

But it is easier to just access the array elements imo.
Or something more fancy:
for ($i = 0; $i < count($matches[0]); $i++) {
        ${'postcode'.$i+1} = $matches[0][$i];
}

But I would just do:
$postcodes = $matches[0];

and then access the postcodes via normal array access.

