Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/266.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 将foreach更改为while循环以保存mysql查询_Php_Arrays_Foreach_While Loop - Fatal编程技术网

Php 将foreach更改为while循环以保存mysql查询

Php 将foreach更改为while循环以保存mysql查询,php,arrays,foreach,while-loop,Php,Arrays,Foreach,While Loop,我现在有这个循环,但是它需要调用数据库5到10次。有没有一种方法我可以只调用它一次,也许是使用while循环,或者任何人都可以想到的任何其他替代方法,因为它会减慢动作 foreach($_SESSION['cart_array'] as $each_item) { $item_id = $each_item['item_id']; $each_quantity = $each_item['quantity']; $item_qry = mysql_query("SELECT *

我现在有这个循环,但是它需要调用数据库5到10次。有没有一种方法我可以只调用它一次,也许是使用while循环,或者任何人都可以想到的任何其他替代方法,因为它会减慢动作

foreach($_SESSION['cart_array'] as $each_item) {
   $item_id = $each_item['item_id'];
   $each_quantity = $each_item['quantity'];
   $item_qry = mysql_query("SELECT * FROM `products` WHERE `products_id`=$item_id");
   $item_row = mysql_fetch_assoc($item_qry);
   $product_price = $item_row['products_price'];
   $total_price += $product_price * $each_quantity;
}

是的,您可以一次选择所有行:

$total_price = 0;
if (!empty($_SESSION["cart_array"])) {
    $query = "SELECT `products_price`, `products_id` FROM `products` WHERE `products_id` IN (";
    $query .= implode(", ", array_map(function ($item) { return $item["item_id"]; }, $_SESSION['cart_array']));
    $query .= ")";
    $result = mysql_query($query);

    while ($row = mysql_fetch_assoc($result))
        $items[$row["products_id"]] = $row["products_price"];

    foreach ($_SESSION["cart_array"] as $item)
        $total_price += $item["quantity"] * $items[$item["item_id"]];
}
一个查询解决方案:

$item_id_array = array();
$item_to_quant = array();
foreach($_SESSION['cart_array'] as $each_item)
{
    $item_id_array[] = $each_item['item_id'];

    $item_to_quant[$each_item['item_id']] = $each_item['quantity'];
}

$item_qry = mysql_query("SELECT * FROM `products` WHERE `products_id` IN (" . implode(',', $item_id_array) . ")");


$total_price = 0;
$results     = array();

while ($item_row = mysql_fetch_assoc($item_qry))
{
    //add total price to result array
    $item_row['total_items_price'] = $item_row['products_price'] * $item_to_quant[$item_row['products_id']];

    $results[] = $item_row;

    $total_price += $item_row['total_item_price'];
}

您将结果数组和总价变量作为结果。

我将$data重命名为$item,因为我假设这是一个错误,但我得到“注意:未定义的偏移量:C:\xampp\htdocs\customers\msl\test-array3.php中的275,在第19行”您还可以建立一个CSV值列表,并使用
WHERE products\u id in(1,2,3,4,5)
@Scuzzy那么循环会是什么?这会从我的初始foreach生成更快的结果吗?@Source它的速度与我的实现一样快是一个查询,如果您有多个产品,应该更快。但对于单个产品来说并不是那么快:)还要确保在DB中有products_id字段的索引。