2016-05-15 19 views
0

Mein Benutzer ein Array von Kategorien, dann muss ich Preise aus einer Tabelle basierend auf dem Array von Kategorien, die der Benutzer ausgewählt auswählen. Bis jetzt konnte ich das gut funktionieren.Wählen Sie die Abfrage funktioniert nicht mit Post-Array mit doppelten Werten

Beispiel:

Array Kategorien: Autoteile, Fahrräder, Biscuits, Deckenventilatoren, Blender, Kunst

Retour Array Preise: 60, 35, 25, 20.15, 5

Dann Ich mache Berechnungen basierend auf den im Tarifarray ausgewählten Raten. Der unten stehende Code funktioniert einwandfrei, wenn im Array keine doppelten Werte vorhanden sind.

Das Problem, das ich habe, ist, wenn der Benutzer eine Kategorie gibt zweimal das zurückgegebene Array nur die Rate für eine Instanz der eingegebenen Kategorie

Beispiel Rückkehr:

Array Kategorien: Autoteile, Fahrräder, Biscuits, Deckenventilatoren, Fahrräder, Blender, Kekse, Kunst

Returned Array Preise: 60, 35, 25, 20, 15, 5

was es bE- sollte> Array Preise: 60, 35, 25, 20, 35, 15, 25, 5

Das Array, das zurückgegeben wird, löscht die doppelten Ratenwerte, aber ich muss die Berechnungen basierend auf der Rate in jeder Zeile des zurückgegebenen Arrays durchführen.

Ich mache jetzt nicht, wie dieser zurückgegebene Wert in dem zurückgegebenen Array bleiben. jede Hilfe wäre großartig oder jeder Vorschlag einer anderen Möglichkeit, dies zu tun.

$qty=mysql_real_escape_string($_POST['qty']; 
$pcategories=mysql_real_escape_string($_POST['pcategories']; 

<?php foreach($qty as $a => $b){ ?> 

<?php // Get the duty rate based on the product categorie user selected 
    $connection = mysqli_connect("localhost","root","","customs") or `enter 
    code here`die("Error " . mysqli_error($connection)); 
$sql = " 
    SELECT `categories`, `rate` 
    FROM `lt_products` 
     WHERE `categories` IN ('".implode("','",$pcategories)."') 
     ORDER BY FIELD(categories, '".implode("','",$pcategories)."')"; 
     $result = mysqli_query($connection, $sql)or die(mysql_error()); 

while($row = mysqli_fetch_assoc($result)) { 
    $row_rate[] = $row["rate"]; 
} 
    $rate_row[] = $row_rate[$a]; 
?> 
+0

können Sie verwenden array_unique http://php.net/manual/en/function.array- unique.php-Methode, um eindeutige Werte aus dem Array zu erhalten. –

+0

Dank @akshay khale für Ihren Vorschlag, aber würde Array_unique nicht das Gegenteil von dem, was ich brauche.Ich muss die doppelten Werte im Rate-Array behalten. Oder wenn Sie mir ein Beispiel geben können, wie ich es dazu verwenden könnte. – Igrooves

Antwort

0

Ihre SQL-Anweisung hängt nicht von $a und $b also warum nicht, es zu nehmen von foreach-Schleife? Es ist nicht notwendig, die Datenbank jedes Mal nach den gleichen Daten zu fragen.

Dann können Sie diesen Code

while($row = mysqli_fetch_assoc($result)) { 
    $row_rate[] = $row["rate"]; 
} 

mit diesem Code

while($row = mysqli_fetch_assoc($result)) { 
    $row_rate[$row["categories"]] = $row["rate"]; 
} 

ersetzen und dann diesen Code hinzufügen

$result_rate = []; //or array() - depends on your PHP version 
foreach ($pcategories as $pcat) { 
    $result_rate[] = $row_rate[$pcat]; 
} 

Jetzt haben Sie eine $result_rate Array auf Ihre Eingabe Kategorien coresponding Array, so können Sie diesen Code

012 ersetzen
$rate_row[] = $row_rate[$a]; 

mit diesem Code

$row_rate[] = $result_rate[$a]; 

Hier sind Sie die volle vorgeschlagene Code:

$qty=mysql_real_escape_string($_POST['qty']; 
$pcategories=mysql_real_escape_string($_POST['pcategories']; 

<?php // Get the duty rate based on the product categorie user selected 
$connection = mysqli_connect("localhost","root","","customs") or `enter code here`die("Error " . mysqli_error($connection)); 
$sql = " SELECT `categories`, `rate` 
     FROM `lt_products` 
     WHERE `categories` IN ('".implode("','",$pcategories)."') 
     ORDER BY FIELD(categories, '".implode("','",$pcategories)."')"; 
$result = mysqli_query($connection, $sql)or die(mysql_error()); 

while($row = mysqli_fetch_assoc($result)) { 
    $row_rate[$row["categories"]] = $row["rate"]; 
} 

$result_rate = []; //or array() - depends on your PHP version 
foreach ($pcategories as $pcat) { 
    $result_rate[] = $row_rate[$pcat]; 
} 

$rate_row = []; //or array() - depends on your PHP version 
<?php foreach($qty as $a => $b){ 
    $rate_row[] = $result_rate[$a]; 
?>