Parse a clean slug URL
The greatest problem with this is that you want to make these elements optional without actually marking whether they are present.  There are at least two alternatives to this or normal GET parameters that allow for all three to be optional.  

Mark whether they are present

Consider a URI that looks like /jobs/keyword/engineer/c++/type/full_time/part_time/location/canada or /jobs-keyword-engineer-c++-type-full_time-part_time-location-canada (if you want everything in the first slot for search engine optimization).  You may prefer something like kword, etype, and loc to make those less likely to show up as keywords themselves.  I would dislike those as variable names, but the exigencies here may make them better as parameter names.  Ideally those would be things that make no sense as keywords.  

This is still slug based.  It simply has some extra information to help you parse.  

Look up everything

You currently have a PHP-based list of valid employment types.  Instead, put every valid employment type and location in a database table.  Then you can say something like 

SELECT parameter_id, parameter_name, parameter_type 
FROM parameters 
WHERE parameter_name IN (?, ?, ?, ?, ?)


where you then pass (for example) 

['engineer', 'c++', 'full_time', 'part_time', 'canada']


as the things to select.  

I would prefer to store employment types in the database, as they are data to me.  Storing them in code is itself a spaghetti code problem in my opinion.  

The results will be all the employment types and locations, which you can then easily represent by objects or IDs.  Whatever remains will be the keywords, which presumably aren't bounded in the same way that employment types and locations are.