[[7,"Qix"],[5,"Bar"],[3,"Foo"]].inject(_.to_s){|r,d|i,k=d;r[/^/]=(_%i==0)?k:"";r.gsub!(/#{i}/,k);(r[/\D/].nil?)?r:r.tr("0124689","")}
This is Ruby \o/
No! Wait, this one is better :
((f={3=>:Foo,5=>:Bar,7=>:Qix}).sort.collect{|i,j|_%i==0?j:""}+_.to_s.split(//).collect{|c|f[c.to_i]||""}).join.sub(/^$/,_.to_s) #foobarqix