いいえ、バグではありません。
PHP 5では、foreach()
配列ではないオブジェクトをループするために使用できます。これらのオブジェクトはと呼ばれIterators
ます。
残念ながら、のような古い配列ベースの関数はshuffle()
イテレータを処理できません。
foreach()
これの主な理由は、イテレータがソート可能でさえない可能性があることです。たとえば、ファイルまたはURLから直接読み取り、ループが繰り返されるたびに新しいデータ行を読み取るイテレータを使用できます。foreach()
これはプロセス中に読み取られるため、明らかに並べ替えることはできません。
巧妙な名前の関数を使用して、イテレータを配列に変換できiterator_to_array()
ます。ただし、イテレータが大量のメモリを使用していることがわかる場合があるため、イテレータが処理するデータの量がわからない場合、これは悪い考えかもしれません。
一部のイテレータは、データを並べ替えたりフィルタリングしたりするために、イテレータオブジェクト自体にメソッドを提供する場合があります。もしそうなら、これは配列としてソートしようとするよりも良い解決策です。
ORMを使用している場合、これはIteratorオブジェクトがDBからデータを読み取っていることを意味します。この場合、DBクエリ(つまりORDER BY
、ORMがそれを行うために提供する任意のメソッド)を介してソートする方が、PHPでデータをソートするよりもおそらく優れたソリューションになります。