【问题标题】:how make a table from input array如何从输入数组制作表格
【发布时间】:2017-04-09 09:50:14
【问题描述】:

我有一些表单输入:
$文本 =
A 2 1 B,
C 4 3 D,
A 3 1 C,
D 2 1 A,
B 1 0 C,
D 0 1 B,
D 2 1 C,
D 0 1 A;

我想从没有重复的输入中创建一个表格。我想数一数比赛的胜负。这是我想要的表:

|no| name | play | win |
|--|------|------|-----|
|1 |  A   |   4  |  3  |
|2 |  B   |   3  |  2  |
|3 |  C   |   4  |  1  |
|4 |  D   |   5  |  2  |
|--|------|------|-----|

我有一个爆成数组的源代码,但是我不知道如何计算比赛并获胜:

$text = A 2 1 B, C 4 3 D, A 3 1 C, D 2 1 A, B 1 0 C, D 0 1 B, D 2 1 C, D 0 1 A;
$arr = explode(",",$text);

foreach($arr as $v){
    preg_match_all('/(\D+)(\d+)/',$v,$match);
    $team1=$match[1][0];
    $team2=$match[1][1];
    $result1=$match[2][0];
    $result2=$match[2][1];
    for ($i=0;$i<9;$i++){
     echo"
      <tr>$i</tr>
      <tr>".$team1.$team2."</tr>
      <tr>???</tr>
      <tr>???</tr>";
   }
 }

那么,有什么办法可以解决呢?请帮忙。谢谢

【问题讨论】:

  • 第二次使用explode,而不是使用preg_match。
  • 或者更好的是,将整个字符串读取为 csv。

标签: php arrays preg-match-all


【解决方案1】:
$text = "A 2 1 B, C 4 3 D, A 3 1 C, D 2 1 A, B 1 0 C, D 0 1 B, D 2 1 C, D 0 1 A";
$newtext = str_replace(' ','',$text);
$arr = explode(",",$newtext);

$teams = array();

foreach($arr as $ch){
    $t1 = substr($ch,0,1);
    $v1 = substr($ch,1,1);
    $v2 = substr($ch,2,1);
    $t2 = substr($ch,3,1);

    $teams[$t1]['plays']++;
    $teams[$t2]['plays']++;

    if($v1>$v2) {
         $teams[$t1]['wins']++;
    }

    if($v2>$v1) {
          $teams[$t2]['wins']++;
    }
}
print_r($teams);

我猜,没有平局的机会?

【讨论】:

    【解决方案2】:

    不要在循环内打印结果。

    首先计算每个用户名的比赛和获胜并存储在一个多维数组中,然后第二次格式化结果。

    这是一个方法(第一步):

    $text = 'A 2 1 B, C 4 3 D, A 3 1 C, D 2 1 A, B 1 0 C, D 0 1 B, D 2 1 C, D 0 1 A';
    $arr = explode(",",$text);
    
    $result = array();
    foreach($arr as $v){
        $res = explode(' ', trim($v));
        if (!isset($result[$res[0]])) $result[$res[0]]['play'] = $result[$res[0]]['win'] = 0;
        if (!isset($result[$res[3]])) $result[$res[3]]['play'] = $result[$res[3]]['win'] = 0;
        $result[$res[0]]['play']++;
        $result[$res[3]]['play']++;
        if ($res[1] > $res[2]) {
            $result[$res[0]]['win']++;
        } else {
            $result[$res[3]]['win']++;
        }
    }
    print_r($result);
    

    输出:

    Array
    (
        [A] => Array
            (
                [win] => 3
                [play] => 4
            )
    
        [B] => Array
            (
                [win] => 2
                [play] => 3
            )
    
        [C] => Array
            (
                [win] => 1
                [play] => 4
            )
    
        [D] => Array
            (
                [win] => 2
                [play] => 5
            )
    
    )
    

    我让你做第二步。

    【讨论】:

      猜你喜欢
      • 2012-02-15
      • 2019-10-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-14
      • 1970-01-01
      • 2019-10-11
      相关资源
      最近更新 更多