2012-03-04 23 views
0

これは私の最初のPHPスクリプトと問題ですが、ivは「あまりにも多くのラテレーション」という関数をループする以外の結論を出さずに時間を検索しました。PHP配列のシャッフル、ユニークな維持

:;重複などで構成されてい

私は120個の要素を含む配列を持っていますが、それはプログラミングを勉強していないか、今までに何ので、この上で私を埋めるために教育を受けた人があることを望んでイム決して私の問題IVを解決するためのdoesnt

myArray = [0]= item_1, [1] = item _1, [2] = item_2, [3] = item_3 ect.. 

簡単に言うとイムフラッシュPHPのpokermachineを作成しようとしているが、私は重複がシャッフルした後、隣同士になりたくないしかしをシャッフルするように配列内のこれらの項目を必要とするが、私はまだする重複を必要とします配列内

これをチェックするためのループ機能はありませんauseそれはあまりにも多くの時間がWICHシャッフルゲームのオッズに影響する変更されます。以下、私が現在持っているものです。

/*あなたがに気づくかもしれ入手できなくなりましたここのリンク*/

を削除しました同じリールの2つのアイテムで倍増する時間 基本的に、php.iniファイル で仮想リールを動的に作成しました。これらの値はリールに10回表示されるように配列($ virtualreel)に繰り返しプッシュされます値はoddsを5回変えて表示されます。その後、$ virtualreelからランダムなスライス()を取り出してこのリールから3つの変数を表示し、他のリールに対して4回ループを繰り返します。また、1回だけシャッフルできますスライス()は同じものからリール配列の順番

私はスライス(配列、3項目)の上に倍増する場合は、シャッフルするためにループ関数を実行していないすべての新しいスピンをシャッフルします。

希望ivはあなたにアイデアを与えるために十分な後に何を説明した。

答えて

1

あなたはこの機能を使用することができます。

<?php 

function shuffleArray($myArray) { 
    $value_count = array_count_values($myArray); 
    foreach($value_count as $key=>$value) { 
     if ($value > count($myArray)/2) { 
      return false; 
     } 
    } 
    $last_value = $myArray[count($myArray) - 1]; 
    unset($myArray[count($myArray) - 1]); 
    $shuffle = array(); 
    $last = false; 
    while (count($myArray) > 0) { 
    $keys = array_keys($myArray); 
    $i = round(rand(0, count($keys) - 1)); 
    while ($last === $myArray[$keys[$i]]) { 
     $i = round(rand(0, count($keys) - 1)); 
    } 
    $shuffle[] = $myArray[$keys[$i]]; 
    $last = $myArray[$keys[$i]]; 
    unset($myArray[$keys[$i]]); 
    } 

    if ($last_value === $last) { 
    $i = 0; 
    foreach($shuffle as $key=>$value) { 
     if ($value !== $last_value) { 
      $i = $key; 
      break; 
     } 
    } 
    array_splice($shuffle, $i + 1, 0, $last_value); 
    } else { 
    $shuffle[] = $last_value; 
    } 

    return $shuffle; 
} 

print_r(shuffleArray(array(1,5,5,3,7,7))); 
+0

あなたの返事をありがとう、それはあなたの例の井戸で動作します。私はこの問題を解決するために私自身のproject.thanksにこのメソッドを組み込むことを試みます。 – joshua

+0

ok私はあなたのメソッドを成功に使用しましたが、スクリプトは静かに中断していますが、定期的には何も表示されません。おそらく、このソリューションを実現するためのもっと現実的な解決策かもしれません。 – joshua

+0

$ myArrayの値の例を教えてください。 – botzko

1

理由だけではない:

編集:

$shuffled = array(); 
while(count($to_shuffle) > 0): 
    $i = rand(0, count($to_shuffle)-1); 
    $shuffled[] = $to_shuffle[$i]; 
    array_splice($to_shuffle, $i, 1,null);     
endwhile; 

私は、これはあなたがいない気にしない場合は、期待していた何だと思いますキーと値の関連付けを保持します。

関連する問題