2016-05-15 32 views
0

我的用户发布了一个类别数组,然后我需要根据用户选择的类别数组选择速率。 到目前为止,我已经能够得到这个工作正常。选择查询不适用于带有重复值的帖子数组

实施例:

阵列类别:汽车零件,自行车,饼干,吊扇,搅拌机,艺术品

返回的数组价格:60,35,25,20,15,5

然后我根据费率数组中选择的费率进行计算。下面的代码在数组中没有重复值时工作正常。

我遇到的问题是,如果用户输入了类别两次返回的数组仅返回率对输入的类别的一个实例

实施例:

阵列分类:汽车零件,自行车,饼干,吊扇,自行车,搅拌机,饼干,艺术品

返回的数组价格:60,35,25,20,15,5

它应该是─>阵列价格:60,35,25, 20,35,15,25,5

正在返回的数组将删除重复的速率值,但我需要根据返回数组的每一行中的速率进行计算。

我现在不知道如何使返回值保留在返回的数组中。任何帮助将是伟大的或任何建议,我可以做到这一点的另一种方式。

$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

您可以使用array_unique http://php.net/manual/en/function.array- unique.php方法从数组中获取唯一值。 –

+0

感谢@akshay khale为您的建议,但不会array_unique做我需要的相反。我需要将重复值保留在rate数组中。或者如果你能给我一个我如何使用它来实现这个目标的例子。 – Igrooves

回答

0

你的SQL语句不依赖于$a$b,为什么不拿出来,从foreach循环?每次在循环中都不需要向数据库询问相同的数据。

然后你就可以使用此代码替换此代码

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

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

现在你有一个$result_rate阵列coresponding您输入类别数组,因此您可以将此代码替换为

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

与此代码

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

给你完整的建议代码:

$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]; 
?>