while的每次迭代都有数组+数组

时间:2017-02-10 09:28:40

标签: php arrays mysqli

如何将数组添加到另一个?我的意思是补充,不要在数组的末尾添加元素。我有一个while结构,我希望它在每次迭代时添加值。

尝试了一些变体,例如$final_array += $final_array;,但我无法找到解决方案,而且我真的不知道如何拼写它以在SO / Google上找到某些内容。

以下是代码:

<?php
$i = 0;
while ($i < 10){
    $i++;
    $sql =  "SELECT * FROM parteneri WHERE nr_intrebare = '$i' AND varianta_raspuns = '$intrebare_01'";
    $result = mysqli_query($con, $sql);

    $final_array = array();

    while ($row = mysqli_fetch_array($result))
    {
        $final_array[] = $row;
    }
}

编辑:

为了清理问题,我的调查问卷有10个<select>字段。这是一个例子:

<select name="intrebare_01">
    <option selected="true" disabled="disabled">Selecteaza o optiune...</option>
    <option value="A">Fotbal</option>
    <option value="B">Tenis</option>
    <option value="C">Basket/Handbal/Hockey/Volei</option>
    <option value="D">Alte sporturi</option>
</select> 

如您所见,每个选项的值都在A到D之间。

我有一张名为&#34; parteneri&#34;包含每个问题的每个值的点。如果您需要问题4答案B的点值,您可以在那里找到它。

&#34; parteneri&#34; (合作伙伴)表具有以下结构:

enter image description here

如您所见,七个合作伙伴中的每个合作伙伴都有一个数字值。

我需要做的是在处理完所有10 <select>之后添加这些合作伙伴中收集的每个点,并显示得分最高的前三个。

如果您有任何我未提及的问题,请询问。

4 个答案:

答案 0 :(得分:2)

根据我的理解,您想要将每个$ final_array的值添加到另一个。 希望这对你有用:)

<?php
    $i = 0;
    $array_sum=[];
     while ($i < 10){
      $i++;
       $sql =  "SELECT * FROM parteneri WHERE nr_intrebare = '$i' AND varianta_raspuns = '$intrebare_01'";
       $result = mysqli_query($con, $sql);

       $final_array = array();

      while ($row = mysqli_fetch_array($result))
      {
        $final_array = $row;
            $array_sum = array_map(function () {
                return array_sum(func_get_args());
            }, $array_sum, $final_array);
      }
     }
    ?>

这里有一个这个概念的例子

<?php 
$c=[];
$b = array(array(1, 20, 11, 8, 3),
           array(10, 2, 5, 10, 0),
           array(10, 2, 5, 10, 0),
           array(10, 2, 5, 10, 0),
           array(10, 2, 5, 10, 0));

                foreach($b as $key => $value){
                    $c = array_map(function () {
                        return array_sum(func_get_args());
                    }, $c, $value);

                }


print_r($c);
?>

以下示例的输出 数组([0] =&gt; 41 [1] =&gt; 28 [2] =&gt; 31 [3] =&gt; 48 [4] =&gt; 3)

答案 1 :(得分:0)

尝试使用此代码:

$i = 0;
$final_array = array();
while ($i < 10){
    $i++;
    $sql =  "SELECT * FROM parteneri WHERE nr_intrebare = '$i' AND varianta_raspuns = '$intrebare_01'";
    $result = mysqli_query($con, $sql);
    $j = 0;
    while ($row = mysqli_fetch_array($result))
    {
        $final_array[$i][$j] = $row;
        $j++;        
    }
}

答案 2 :(得分:0)

<?php
$final_array = array();
$i = 0;
while ($i < 10){
    $i++;
    $sql =  "SELECT * FROM parteneri WHERE nr_intrebare = '$i' AND varianta_raspuns = '$intrebare_01'";
    $result = mysqli_query($con, $sql);

    $small_array = array();

    while ($row = mysqli_fetch_array($result))
    {
        $small_array[] = $row;
    }
      $final_array[] = $small_array;
}

你的意思是这样的吗?

答案 3 :(得分:0)

如果您尝试将查询找到的行添加到$final_array,请在两个循环外部初始化$final_array

您还可以通过在此处使用准备好的参数化查询来改进运行时和安全性,准备一次并执行多次,因此数据库只需编译,优化和准备一次执行计划,而不是每次迭代一次。

<?php
    $sql =  "SELECT * 
            FROM parteneri 
            WHERE nr_intrebare = ? 
              AND varianta_raspuns = ?";

    $stmt = $con->prepare($sql);

    $final_array = array();
    $i = 0;

    while ($i < 10){
        $i++;
        $stmt->bind_param('is', $i, $intrebare_01);        
        $stmt->execute();

        while ($row = stmt->fetch_assoc()) {
            $final_array[] = $row;
        }
    }

    print_r($final_array);

如果你真的不需要你的进程中的所有列,用一个特定列的SELECT替换SELECT *,这也将改善运行时和内存使用