I don't really get that?! $nonNumericFound is set every-time in the loop and not used below...
Could you explain what should be the strategy for suggestName()?
Like
1. use the PK as fallback
2. suggest the name when finding "name" or "title" in the columns <-- Should we make this configurable?