文法的には
string readdir ([ resource $dir_handle ] )

で、指定したディレクトリにあるファイル名を返します。
が、このファイル名の返却順がファイル名順になるわけではないです。これで結構バグが起きやすい。

返却順は、その「ファイルシステム上に格納されている順番」で返されます。
つまり、a.jpgとb.jpgとc.jpgがあったとして、必ずしもa~cの順で返ってはきません。

ファイル名順で返ってくること前提でその後の処理を組んでいると痛い目に合うので、必ず取得後にソートの処理を入れましょう。