代码之家  ›  专栏  ›  技术社区  ›  Muratcan

如何合并来自不同文件的一个数组中的两个或多个数组值

php
  •  0
  • Muratcan  · 技术社区  · 6 年前

    我有4个php文件,它们几乎都是一样的,只是表名不同,数组中的值也不同,我想把所有这些值放在一个数组中的另一个php文件中。

    这个文件是germany.php

    foreach($array as $key => $val) {
        $Home=0;
        $Draw=0;
        $Away=0;
        $sql = "SELECT * FROM Germany where B = '{$val['B']}' AND E = '{$val['E']}' AND F = '{$val['F']}' AND O ='{$val['O']}' AND A = '*' ";
        $result = $conn->query($sql);
        if ($result->num_rows > 0) {
        $rowcount=mysqli_num_rows($result);
            // output data of each row 
            while($row = $result->fetch_assoc()) {
                if($row['R'] == 1){
                    $Home++;
                }elseif($row['R'] == 0){
                    $Draw++;
                }else{
                    $Away++;
                }
            }
    
            //We use an array rather than overriding everytime
            $AwayPrediction[$key] = round(($Away/$rowcount )*100);
        } else {
            echo "0 results";
        }
    }
    $conn->close();
    

    我想在index.php中必须这样做

    <table class="table">   
    <thead> 
          <tr>
            <th>Home</th>
             <th>Away</th>
             <th>Result</th>
          </tr>
    </thead>
    
        <?php
    
    
    
    
    
    
    $array_of_teams=array();
            include 'germany.php';
            foreach($array as $key => $data) {
        $array_of_teams+=merge($AwayPrediction[$key]);
            echo "<tr>";
            echo "<td>".$data['H']."</td>";
            echo "<td>".$data['M']."</td>";
    
        echo "<td>".$AwayPrediction[$key]."</td>";
        }
    
    include 'france.php';
    foreach($array as $key => $data) {
    
        $array_of_teams+=merge($AwayPrediction[$key]);
    
    echo "<tr>";
    echo "<td>".$data['H']."</td>";
    echo "<td>".$data['M']."</td>";
    
    echo "<td>".$AwayPrediction[$key]."</td>";
    }
    

    如何合并或添加$AWAYPROCED[$KE]到$ARYAYOFOFSARS=ARARYY();对于每个文件?

    0 回复  |  直到 6 年前
        1
  •  1
  •   uxmal    6 年前

    你的php“display”部分

    foreach($array as $key => $data) {
        echo "<tr>";
        echo "<td>".$data['H']."</td>";
        echo "<td>".$data['M']."</td>";
    
    echo "<td>".$AwayPrediction[$key]."</td>";
    }
    

    仅显示上一个数组 include 'england.php'; 所以在每个数组后面放置一个显示区域,比如

    include 'germany.php';
    foreach($array as $key => $data) {
            echo "<tr>";
            echo "<td>".$data['H']."</td>";
            echo "<td>".$data['M']."</td>";
    
        echo "<td>".$AwayPrediction[$key]."</td>";
        }
    
    include 'france.php';
    foreach($array as $key => $data) {
    echo "<tr>";
    echo "<td>".$data['H']."</td>";
    echo "<td>".$data['M']."</td>";
    
    echo "<td>".$AwayPrediction[$key]."</td>";
    }
    
        2
  •  0
  •   Andrii Filenko    6 年前

    首先,你应该跟着 DRY principle 尽量减少代码库中的代码重复。在您的情况下,可以为重复功能创建一个函数:

    function predictionForCountry($countryName, $array, $conn)
    {
        foreach ($array as $key => $val) {
            $Home = 0;
            $Draw = 0;
            $Away = 0;
            $sql = "SELECT * FROM {$countryName} where B = '{$val['B']}' AND E = '{$val['E']}' AND F = '{$val['F']}' AND O ='{$val['O']}' AND A = '*' ";
            $result = $conn->query($sql);
            if ($result->num_rows > 0) {
                $rowcount = mysqli_num_rows($result);
                // output data of each row 
                while ($row = $result->fetch_assoc()) {
                    if ($row['R'] == 1) {
                        $Home++;
                    } elseif ($row['R'] == 0) {
                        $Draw++;
                    } else {
                        $Away++;
                    }
                }
    
                //We use an array rather than overriding everytime
                $AwayPrediction[$key] = round(($Away / $rowcount) * 100);
            } else {
                echo "0 results";
            }
        }
        return $array;
    }
    

    另一个可能的解决方案,如果您的表具有相同数量的列,则可以使用 UNION ALL 运算符将所有结果合并到SQL中,根据需要调整where条件(如果每个国家的情况不同):

    $sql = "SELECT * FROM Germany where B = '{$val['B']}' AND E = '{$val['E']}' AND F = '{$val['F']}' AND O ='{$val['O']}' AND A = '*' 
            UNION ALL
            SELECT * FROM France where B = '{$val['B']}' AND E = '{$val['E']}' AND F = '{$val['F']}' AND O ='{$val['O']}' AND A = '*' 
            UNION ALL
            SELECT * FROM Holland where B = '{$val['B']}' AND E = '{$val['E']}' AND F = '{$val['F']}' AND O ='{$val['O']}' AND A = '*' 
            UNION ALL
            SELECT * FROM England where B = '{$val['B']}' AND E = '{$val['E']}' AND F = '{$val['F']}' AND O ='{$val['O']}' AND A = '*' ";
    $result = $conn->query($sql);
    
        3
  •  0
  •   Tuckbros    6 年前

    $array 没有改变,似乎所有国家都一样 $key $val $data . 每个include都将覆盖上一个 $AwayPrediction[$key] 你不会发现国家之间有什么不同。

    • 如果你想要一个全局结果,你可以每个 $awaypredition[$key] 对于它的前一个值,与rowcount相同,在显示它之前,您要计算百分比。

    在国家档案中:

    $rowcount += mysqli_num_rows($result);
    $AwayPrediction[$key] += $Away;
    

    在ph.php中

    echo "<td>".round(($AwayPrediction[$key]/$rowcount )*100)."</td>";
    
    • 如果您想要每个国家的结果,可以将1维添加到 $AwayPrediction[$key]['Germany']

    然后你可以做这样的事情:

    foreach ($array as $key => $data) {
      foreach ($AwayPrediction[$key] as $country => $prediction) {
        echo "<tr>";
        echo "<td>".$data['H']."</td>";
        echo "<td>".$data['M']."</td>";
        echo "<td>".$country."</td><td>".$prediction."<td>\n";
      }
    }
    
    推荐文章