2017-02-10 12 views
0

配列を別の配列に追加するにはどうすればよいですか?私は追加を意味し、配列の最後に要素を追加しません。私は構造があり、各反復で値を追加したい。while + 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> 

は、各オプションは、これらの値のそれぞれのポイントが含まれている私は、テーブルには、「parteneri」と呼ばれてきたからD.

の範囲の値を持ちますそれぞれの質問。あなたが質問4の回答Bのポイントで値を必要とする場合は、そこに見つけることができます。

「parteneri」(パートナー)テーブルには、次の構造を有する:あなたが見ることができるように

enter image description here

を、7人のパートナーのそれぞれについて、各オプションの数値があります。

私がする必要があるのは、10 <select>のすべてを処理した後に収集したこれらのパートナーのそれぞれのポイントを追加し、最も多くのポイントを獲得した最初の3つを表示することです。

ご不明な点がありましたらお尋ねください。

+2

あなたのデータの例を投稿できますか?いくつかのエントリを持つ配列だけでなく、 '$ final_array'が最後にどのように見えるのでしょうか? – Twinfriends

+0

あなたは試しましたか?= – Michael

+1

あなたの質問は不明です。 「配列を配列に追加する」、または「配列+配列」とはどういう意味ですか?要素を配列に追加したくない場合は、それ以外は何ですか?いくつかの配列が外側の配列に含まれていますか?あなたの質問を編集して、実際にあなたが作成したいものが何であるかを明確にしてみてください。 – arkascha

答えて

2

私は理解されるようにあたりとして、あなたはあなたのことを質問ランタイムとメモリ使用量を向上させます各$ final_arrayの値を別のものに追加したいとします。これはuがここ

<?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] => 41 [1] => 28 [2] => 31 [3] => 48 [4] => 3)

+0

私はあなたのソリューションを適用しました。配列[0] => 200 [1] => 200 [2] => 55 [3] => 55 [4] => 0 [5] => 0 [6] => 45 [ 45] [11] => 45 [12] => 47 [13] => 47 [14] => 59 [15] => 59 [16] => 52 [17] => 52 [18] => 30 [19] => 30)データベースに10列しかないので少し混乱します。たぶん私はそれを間違って適用した? – SporeDev

+0

まず、配列 '$ b'のようにデータを取得し、多次元配列を生成する必要があります。次に、以下のforeachを実行します。 1つの注意:数値を含まない列は避けなければなりません。 –

+0

これを試してみましたが、失敗しました。配列に出たときに私が追いつくべきことがたくさんあるようです。元の回答にさらに説明を付けることはできますか?ありがとう! – SporeDev

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++;   
    } 
} 
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; 
} 

あなたが意味このような何かを?

0

クエリで見つかった行を$final_arrayに追加する場合は、両方のループの外に$final_arrayを初期化します。

準備されたパラメータ化されたクエリを使用して、1回だけ準備して何度も実行することで、実行時間とセキュリティを向上させることもできます。

<?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 *を置き換えるには、これはまた