Casi siempre que se modifican cadenas de texto en PHP se necesita transformarlas, ya sea para adecuarlas a búsquedas o para eliminar palabras innecesarias o re ordenar totalmente el texto.
Pongamos un ejemplo: digamos que obtienen de un formulario de busqueda el nombre de un color para luego buscar los productos de ese color.
Bien, el problema es que los colores tienen muchas variantes de nombre (ej. rosado/rosa, naranja/anaranjado o incluso genero y cantidad: rojo/roja/rojos/rojas).
Por supuesto podrian hacer algo asi:
<?php
$verdarera_busqueda = preg_replace('/roj[ao]s{0,1}/i','rojo',$busqueda);
?>
Lo cual convertiria "rojo", "rojos", "roja", "rojas" en simplemente "rojo".
Pero que sucede si son tantos colores??, hacer una linea completa por preg_replace por cada color es muy malo para la legibilidad del codigo.
De acuerdo, preg_replace acepta arrays como expresiones y remplazos.
Que tal si ahora hacemos esto:
<?php
$verdarera_busqueda = preg_replace(array('/roj[ao]s{0,1}/i','/amarill[ao]{0,1}/i'), array('rojo', 'amarillo'), $busqueda);
?>
Mejor? talvez, pero con muchisimos colores seria una cadena muy larga e incomprensible (de hecho asi solo hay dos colores y ya se ve feo).
Así que, porque no ocupamos array_keys & array_values?
<?php
$array_colores = array('/roj[ao]s{0,1}/i' => 'rojo', '/amarill[ao]s{0,1}/i' => 'amarillo');
$verdarera_busqueda = preg_replace(array_keys($array_colores), array_values($array_colores), $busqueda);
?>
Esto esta mejor, considerando que el array se puede construir de forma mucho mas ordenada y el preg_replace se mantiene intacto.
Pero aun asi, repetimos innecesariamente el "/
color[ao]s{0,1}/i" para cada color que queremos reemplazar, asi que aqui entra en juego array_map:
<?php
function __variar_color_callback($color)
{
return '/'.$color.'[aeiou]s{0,1}/i';
}
$variaciones = array('rosad' => 'rosa', 'amarill' => 'amarillo', 'roj' => 'rojo', 'anarajad' => 'naranja');
$verdarera_busqueda = preg_replace(array_map('__variar_color_callback',array_keys($variaciones)),array_values($variaciones),$busqueda);
?>
Ahora el array es super comprensible y se puede extender muchisimo mas facil que en cualquiera de los casos anteriores

.
Espero hayan aprendido algo nuevo en este mini-tip, y espero estar poniendo uno nuevo a la semana al menos

Si no conocen las funciones utilizadas pues no hay mejor recuerso que el propio PHP:
preg_replacearray_maparray_keysarray_values