You should optimize your database structure. While there are ways to work around what you've come up with, I think it would be better to normalize your tables so that you have a table of players and a different table that has player IDs and possible positions (if you really care whether it's a primary or secondary position, you can add a field for that as well).
So your players
table would be
╔═══════════╦═════════════╗
║ player_id ║ player_name ║
╠═══════════╬═════════════╣
║ 1 ║ John Doe ║
╚═══════════╩═════════════╝
Plus more if needed; the rest of your structure isn't clear to me from reading the question. The positions
table would be:
╔═══════════╦═══════════╦═══════════╗
║ player_id ║ position ║ role ║
╠═══════════╬═══════════╬═══════════╣
║ 1 ║ flyhalf ║ primary ║
║ 1 ║ fullback ║ secondary ║
╚═══════════╩═══════════╩═══════════╝
Then to find all players who play flyhalf, you would query select `players`.`player_name` from `players`,`positions` where `positions`.`position` = "flyhalf" and `players`.`player_id`=`position`.`plr_id`
Furthermore, you could (and probably should) normalize the position names to another table, so positions.position
is an integer referencing table possible_positions
╔════════╦═══════════╗
║ pos_id ║ position ║
╠════════╬═══════════╣
║ 1 ║ flyhalf ║
║ 2 ║ fullback ║
╚════════╩═══════════╝
Furthermore, doing that will allow you to keep the list of possible positions in the database and as a database query rather than hardcoding in to the PHP array as you currently do.
At least, that should get you started. Database normalization and having a proper structure from the beginning will probably be a big help to you constructing these queries.