Prima di tutto, non puoi mettere la condizione temporale insieme a quella per determinare gli id? Così fai tutto con una query:
Codice PHP:
SELECT FROM frasi WHERE <tua condizione> AND DATEDIFF(CURDATE(), lastused) > 
In caso contrario, visto che hai degli id, puoi usare la IN senza ciclare (non proprio) l'array:

Codice PHP:
"SELECT id FROM frasi".$categoria." WHERE DATEDIFF(CURDATE(),lastused) > 7 AND id IN (".implode(',',$var).")"
Infine, il tuo "buchi" nell'array son dovuti al fatto che usi lo stesso indice per scorrere $var e per inserire in $accettati. Se poi aggiungi il fatto che usi un for($i=0 ...) allora avrai solo delle incongruenze in quanto gli indici non saranno contingui al contrario dei valori di $i. Per risolvere basta che cambi
Codice PHP:
$accettati[$i] = $var[$i]; 
in
Codice PHP:
$accettati[] = $var[$i];