If you need the modified paths to work only for your convenience when working from the console, you could override cd:
function cd() {
builtin cd "$@"
case $(pwd) in
*/project1*) export PATH=somepath1;;
*/project2*) export PATH=somepath2;;
...
esac
}
export -f cd
This will of course only work if you change the directory using shell's cd command, not if an application changes it using C API for example. This code is also a bit tricky, as you have to list a number of PATH values and be sure to handle reasonably the case for "standard" directories (those outside from your projects) where you probably want to reset PATH to the original value. Also, you may run into interactions with users or scripts manually modifying their PATH values. The values you set should include those, but you will need to store PATH in a temporary variable, like ORIG_PATH, before overriding cd.
Point is: what you ask for is possible (as shown above), but it may cause confusion and require some work. Config scripts sourced when you switch between projects that jcollado suggested are the standard and a much cleaner solution.