0

結果テーブルがあり、それを反復処理してからエコーします。

$c = 1;
foreach ($results as $result) {
    $r .= '<tr>'
    . '<th scope="row">' . ($time === $result['time']? $c - 1 : $c)  . '</th>'
    . '<td>' . $result['name'] . '</td>'
    . '<td>' . $result['time'] . ' </td>'
    . '<td>' . $result['points'] . ' </td>'
    . '</tr>';

    $time = $result['time'];
    $c++;
}

現在の時刻と前回の結果時刻を比較し、一致する場合はカウントを同じに表示します。例:
1. トム 0.33
2. ベン 0.34
2. カール 0.34
4. デズ 0.35
5. デイブ 0.36

しかし、Des も 0.34 だったらどうでしょうか? カウント 3 が表示され、2 のままになるはずです。

複雑になりすぎずにこれを解決する方法はありますか?

4

4 に答える 4

2
$c = 1;
$lastC = $c;
foreach ($results as $result) {

    if ($time === $result['time']) {
        $place = $lastC;
    } else {
        $place = $c;
        $lastC = $c;
    }

    $r .= '<tr>'
    . '<th scope="row">' . $place  . '</th>'
    . '<td>' . $result['name'] . '</td>'
    . '<td>' . $result['time'] . ' </td>'
    . '<td>' . $result['points'] . ' </td>'
    . '</tr>';

    $time = $result['time'];
    $c++;
}
于 2013-07-17T14:12:46.460 に答える
1

それは、1だけ減分しているためです。

$c - 1

あなたが持っているようなカウンターが必要ですが、現在の行です。何かのようなもの

$c = 1;
$curr = $c;
foreach( $results as $result){
  if($time === $result['time']){
    use $curr;
  }else{
    use $c;
    $curr = $c + 1;
  }
  $c++;
}

しかし、$c++ を移動すると、次のように $curr で結び付けることができます。

$c++;
$curr = $c;
于 2013-07-17T14:10:13.720 に答える
-1

短いifで時間​​通りに数学演算を行います。結果を永続化する必要があります。

$c = 1;
foreach ($results as $result) {
    if($time === $result['time'])
      $c--;
    $r .= '<tr>'
    . '<th scope="row">' . $c  . '</th>'
    . '<td>' . $result['name'] . '</td>'
    . '<td>' . $result['time'] . ' </td>'
    . '<td>' . $result['points'] . ' </td>'
    . '</tr>';

    $time = $result['time'];
    $c++;
}
于 2013-07-17T14:22:23.180 に答える