2017-02-10 3 views
0

Wie füge ich ein Array zu einem anderen hinzu? Ich meine zusätzlich, nicht die Elemente am Ende des Arrays hinzufügen. Ich habe eine while-Struktur und möchte, dass die Werte bei jeder Iteration hinzugefügt werden.Array + Array bei jeder Iteration der While

Ich habe versucht, ein paar Varianten wie $final_array += $final_array;, aber ich konnte keine Lösung finden und ich weiß nicht wirklich, wie man es buchstabieren, um etwas über SO/Google zu finden. Hier

ist der Code:

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

Edit:

löschen Dinge, ich habe einen Fragebogen, der 10 <select> Felder. Hier ein Beispiel:

<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> 

Wie Sie sehen können, hat jede Option einen Wert von A bis D im Bereich

Ich habe eine Tabelle „Parteneri“ genannt, die die Punkte eines jeden dieser Werte enthält, die für jede Frage. Wenn Sie den Wert in den Punkten der Frage 4 Antwort B benötigen, können Sie ihn dort finden.

Die „Parteneri“ (Partner) Tabelle hat die folgende Struktur:

enter image description here

Wie Sie sehen können, gibt es einen numerischen Wert für jede Option für jeden der sieben Partner.

Was ich tun muss, ist die Punkte, die jeder dieser Partner gesammelt nach der Verarbeitung aller 10 <select> und zeigen Sie die ersten drei, die die meisten Punkte.

Bitte fragen Sie, wenn Sie Fragen haben, die ich nicht behandelt habe.

+2

Können Sie bitte ein Beispiel Ihrer Daten posten? Nur ein Array mit einigen Einträgen, und wie sollte '$ final_array' am Ende aussehen? – Twinfriends

+0

haben Sie versucht. = – Michael

+1

Ihre Frage ist unklar. Was meinst du mit "ein Array zu einem Array hinzufügen" oder "Array + Array"? Wenn Sie _nicht_ möchten, die Elemente zu einem Array hinzuzufügen, was sonst? Sie möchten mehrere Arrays in einem äußeren Array enthalten? Bitte editiere deine Frage und versuche zu verdeutlichen, vielleicht ein Beispiel zu geben, was du eigentlich erschaffen willst. – arkascha

Antwort

2

Gemäß verbessern, wie ich verstanden, Sie zu fragen, dass Sie möchte die Werte jedes $ final_array zu einem anderen hinzufügen. Hoffnung dies hilfreich sein wird 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); 
     } 
    } 
    ?> 

Hier haben ein Beispiel für dieses Konzept

<?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); 
?> 

Ausgabe dieses folgenden Beispiel Array ([0] => 41 [1] = :)> 28 [2] => 31 [3] => 48 [4] => 3)

+0

Ich habe Ihre Lösung angewendet. Es druckt dieses Array: Array ([0] => 200 [1] => 200 [2] => 55 [3] => 55 [4] => 0 [5] => 0 [6] => 45 [ 7] => 45 [8] => 35 [9] => 35 [10] => 45 [11] => 45 [12] => 47 [13] => 47 [14] => 59 [15] => 59 [16] => 52 [17] => 52 [18] => 30 [19] => 30) Ich bin etwas verwirrt, da ich nur 10 Spalten in der Datenbank habe. Vielleicht habe ich es falsch angewendet? – SporeDev

+0

Zuerst sollten Sie Ihre Daten abrufen und ein mehrdimensionales Array wie im Beispiel-Array $ b erzeugen. Dann führst du die folgende foreach aus. Eine Anmerkung: Sie müssen diese Spalte vermeiden, die keinen numerischen Wert enthält. –

+0

Versucht, dies zu tun, aber ich scheiterte, scheint, dass ich eine Menge zu holen habe, wenn ich zu Arrays komme. Können Sie in der ursprünglichen Antwort weitere Erläuterungen geben? Vielen Dank! – SporeDev

0

Versuchen Sie diesen Code zu verwenden:

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

So etwas Sie?

0

Wenn Sie versuchen, die von Ihrer Abfrage gefundenen Zeilen zu $final_array hinzuzufügen, initialisieren Sie die $final_array außerhalb beider Schleifen.

Sie könnten auch die Laufzeit und Sicherheit verbessern, indem Sie hier eine vorbereitete parametrisierte Abfrage erstellen, einmal vorbereiten und viele Male ausführen, sodass die Datenbank einen Ausführungsplan nur einmal pro Iteration kompilieren, optimieren und vorbereiten muss.

<?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); 

Und wenn Sie wirklich brauchen nicht alle Spalten in Ihrem Prozess, ersetzen SELECT * mit einem SELECT von bestimmten Spalten, wird dies auch Laufzeit- und Speichernutzung

Verwandte Themen