Функция preg_match
возвращает 1, если что-то нашла. Чтобы получить совпадение (а), вы должны использовать третий аргумент функции.
Вот исправление для вашего примера:
$amount_part = preg_match('/[0-9]+/', $myarray[$a], $matches);
foreach ($matches as $m) {
$myarray[$a] = str_replace($m, $m / $numberofservings, $myarray[$a]);
}