2016-12-29 1 views
0

数値配列のすべての可能な置換を見つける最速の方法を探していましたが、この関数が見つかりました。PHPを使用した数値配列のランダムN置換の取得

private function permute(array $elements) 
    { 
     if (count($elements) <= 1) { 
      yield $elements; 
     } else { 
      foreach ($this->permute(array_slice($elements, 1)) as $permutation) { 
       foreach (range(0, count($elements) - 1) as $i) { 
        yield array_merge(
         array_slice($permutation, 0, $i), 
         [$elements[0]], 
         array_slice($permutation, $i) 
        ); 
       } 
      } 
     } 
    } 

私が必要とするのは、結果をシャッフルして数値配列のランダムN置換を得ることです。

問題は、オブジェクトを返し、その結果をシャッフルすることは不可能です。

訴訟はありますか? 提案があります

答えて

0

このメソッドは、Generator Classのインスタンスを返します。これはreturnの代わりにyieldを使用するため、予測可能です。あなたはforeachでこのオブジェクトをループすることもできますし、場合によってはiterator_to_arrayで並べ替え全体を得ることもできます(これはジェネレータがTraversable interfaceを実装しているため可能です)。

$permutations = iterator_to_array(permute($array)); 

shuffle($permutations); 

$result = array_slice($permutations, 0, 3); 

ここはworking demoです。

more about generatorsを読むことができます。

関連する問題