2016-06-25 28 views
0

我有以下的陣列名爲$項:環流式Througn陣列

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」,所以如果有兩次加熱,我需要迭代通過$ entries數組,並採取第一個加熱1和第二個加熱2依此類推。如果「heat_count」是3,那麼第一到第一到第二到第二到第三到第三到第四到第五到第六到第三...等等。

在1到50的事件中,每個類可以有任何數量的加熱。因此,如果沒有一百萬條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等等。 – 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

我開始的計數器爲1,因爲永遠不會有熱量0,然後在'heat_nbr'=> $ nextHeatNumberToAssign的末尾添加+1,因爲沒有正確遞增 – indymx