循环转换数组

时间:2016-06-25 02:50:29

标签: php arrays loops nested-loops

我有以下名为$ entries的数组:

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] [&#39; heat_count&#39;]来自较早的查询,该查询计算&#34; heat&#34;中的车手数量。

我需要的是设置&#34; heat_number&#34;根据&#34; heat_count&#34;,所以如果有2个加热,我需要通过$ entries数组进行迭代,然后取第1个加热1,第二个加热2,依此类推。如果&#34; heat_count&#34;是3,然后是1到1,第2到2,第3到3,第4到第1,第5到第2到第6到第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) } 

1 个答案:

答案 0 :(得分: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'])
            ];
    }
}