Pues no se, yo crearia un array temporal (Para ser super originales podriamos llamarlo $c) y hacer el cambio. Ni me tome la molestia de buscar alguna función porque me parece que es muy sencillo de hacer. No me demore ni un minuto. Doy por entendido que el arreglo $a es dinamico y el $b es estático (si te entendi bien)
Código PHP:
<?php
$a = array ('valor1', 'valor2', 'valor3');
$b = array ('valor1' => 10, 'valor2' => 12, 'valor3' => 5);
for ($i=0;$i<sizeof($a);$i++)
{
$c[$a[$i]]=$b[$a[$i]];
}
print_r($c);
?>
Seguro se podra hacer mas facil con funciones de arreglos, pero a mi se me ocurrio la manera "dificil"de hacerlo