<?php

$string = "fuel cap for car";

$find = array('cap', 'fuel cap for car');
$replace = array('hat', 'auto parts');
$arr = array_combine($find, $replace);
usort($find, function($a, $b) {
    return strlen($b) - strlen($a);
});

echo preg_replace_callback('~\b(?:' . implode('|', $find) . ')\b~', function($x) use ($arr) {
	return $arr[$x[0]];
}, $string);