2016-06-25 3 views
0

array ( 
    0 => array ('entry_id' => 8132, 'racer_id' => 1302, 'class_id' => 20,), 
    1 => array ('entry_id' => 8239, 'racer_id' => 851, 'class_id' => 20,), 
    2 => array ('entry_id' => 8240, 'racer_id' => 850, 'class_id' => 20,), 
    3 => array ('entry_id' => 8241, 'racer_id' => 1222, 'class_id' => 20,), 
    4 => array ('entry_id' => 8243, 'racer_id' => 1221, 'class_id' => 20,), 
    5 => array ('entry_id' => 8250, 'racer_id' => 673, 'class_id' => 20,), 
    6 => array ('entry_id' => 8255, 'racer_id' => 674, 'class_id' => 20,), 
    7 => array ('entry_id' => 8258, 'racer_id' => 666, 'class_id' => 20,), 
    8 => array ('entry_id' => 8266, 'racer_id' => 193, 'class_id' => 20,), 
) 

とその配列スルーループにこのコード。

foreach ($entries as $entry) { 
    for ($i = 1; $i <= $list[0]['heat_count']; ++$i) { 
     if ($entry['class_id'] == $class) { 
      $heats[$class] = [ 
       'heat_nbr' => $i, 
       'entry_id' => $entry['entry_id'], 
       'racer_name' => $f->getRacerFullName($entry['racer_id']) 
      ]; 
     } 
    } 
} 

私は必要な出力が得られません。変数$ list [0] ['heat_count']は、「ヒート」のライダーの数をカウントする先のクエリから来ています。

"heat_count"に基づいて "heat_number"を設定する必要があるので、2ヒートがある場合は、$ entries配列を繰り返し、1をヒート1に、2をヒート2にする必要がありますループを介して順番に繰り返します。 「heat_count」が3であれば、1番目から1番目、2番目から2番目、3番目から3番目、4番目から1番目、5番目から2番目の6番目から3番目...というようになります。

1から50までのイベントでは、クラスごとに任意の数のヒートが存在する可能性があります.100万のif文なしで不可能なハードコーディング。

私はここで何を理解して正しい方向に私を押し込むことができますか?

array(2) { ["heat_nbr"]=> int(2) ["entry_id"]=> int(8132) } array(2) { ["heat_nbr"]=> int(2) ["entry_id"]=> int(8239) } array(2) { ["heat_nbr"]=> int(2) ["entry_id"]=> int(8240) } array(2) { ["heat_nbr"]=> int(2) ["entry_id"]=> int(8241) } array(2) { ["heat_nbr"]=> int(2) ["entry_id"]=> int(8243) } array(2) { ["heat_nbr"]=> int(2) ["entry_id"]=> int(8250) } array(2) { ["heat_nbr"]=> int(2) ["entry_id"]=> int(8255) } array(2) { ["heat_nbr"]=> int(2) ["entry_id"]=> int(8258) } array(2) { ["heat_nbr"]=> int(2) ["entry_id"]=> int(8266) } 
+0

ですから、参加者のリストを持っていて、別の加熱の間にそれらを分割しようとしていますか? – BizzyBob

+0

'$ list'の構造と期待する結果を表示することは良いことです。 – olibiaz

+0

はい。単純な除算は飛ばない。私はサインアップに基づいて熱にそれらを配置する必要があります。 ヒート1、ヒート2ヒート2など。 – indymx

答えて

2

あなたは次のヒート番号を割り当てることができますので、あなたが加熱に割り当てられているどのように多くの参加者を追跡する必要があります。

これは私が今以上のループから得るものです。このような

何か作業をする必要があります:

$numberOfHeats = $list[0]['heat_count']; 
$counter = 0; 

foreach ($entries as $entry){ 
    if($entry['class_id'] == $class) { 

     $nextHeatNumberToAssign = ($counter % $numberOfHeats) + 1; 
     $counter++; 

     $heats[$class][] = [ 
      'heat_nbr' => $nextHeatNumberToAssign, 
      'entry_id' => $entry['entry_id'], 
      'racer_name' => $f->getRacerFullName($entry['racer_id']) 
      ]; 
    } 
} 
+0

は完璧に動作します。$ counter = 1に設定した後、それはメインループの外側です。 ;) – indymx

+0

ああ、優秀な...聞いていい!私は上のコードでそれを更新しました:-) – BizzyBob

+0

ヒート0は決してないでしょうから、 'heat_nbr' => $ nextHeatNumberToAssignの最後に+1を加えたので、カウンタ1で始めました。 – indymx

関連する問題