ごめんなさい説明力低くて。
function syori($hoge){
 $data=array();$data["1"]="あ";$data["2"]="い";$data["3"]="う";
 $matches=array();
 $kekka["k"]=preg_replace_callback('/([0-9]+)/',function($str){$matches[]=$str;return $data[$str];},"1-2-3");
 $kekka["r"]=$matches;
 return $kekka;
}
$result=syori("1-2-3");

において、$dataと$matchesがグローバルだった場合は
$resultが
$result["k"]="あ-い-う";
$result["r"]=array("1","2","3");
となって欲しいです。

つまり
function($str){$matches[]=$str;return $data[$str];}
の中の$matchesと$dataをどうにかしてこの無名関数の外に出し入れしたい。という事です