preg_match_all produces a 2d array. You can do something like...
$pattern = '@(<description>).*?(?=</description>)@';
preg_match_all($pattern, $content, $matches);
$description = substr($matches, 13);
$description2 = substr($matches, 13);
echo 'The description is ' . $description . ' and the 2nd description
is ' . $description2;
Just after the preg_match_all. This will give you an overview of the array created. The way 2,3,4,5 even 8934880203D arrays work, is you have arrays inside arrays inside arrays etc. This is really handy in some cases. You can see in my code, $matches. This means item 0 of array 1 and item 1 of array 2. If you had a 5D array, you could do something like $matches.
echo '<pre>'; print_r($matches); echo '</pre>';
Anywhooo, hope this helps