0

是否可以重新启动while循环?我目前在 foreach 循环中存在一个 while 循环,我需要 while 语句每次都从头开始。

$sql = mysqli_query($link, "SELECT * FROM products");
$products = array('Milk', 'Cheese', 'Eggs');
$i = 0;
$total = count($products); //This is in case I change the product list.

if($sql)
{
    foreach($products as $v)
    {
        while($r = mysqli_fetch_assoc($sql))
        {
            if($r['Name'] == $v)
            {
                echo $r['Name'] . " - £" . $r['Price'];
                break;
            }
        }
    }
}

我的问题发生在代码运行并产生MilkEggs在数据库Cheese中出现之前Eggs,因此似乎永远找不到。如何重新启动 while 循环以强制代码从 sql 查询开始检查每个值?

已解决:使用散列来查询而不是循环 sql。

4

1 回答 1

2

我认为您最好的选择是将查询的结果存储在 O(1) 查找的哈希中,而不是一遍又一遍地从 sql 中读取。

$sql = mysqli_query($link, "SELECT * FROM products");
$sql_products = array();
$products = array('Milk', 'Cheese', 'Eggs');
$i = 0;
$total = count($products); //This is in case I change the product list.

if($sql)
{
    while($r = mysqli_fetch_assoc($sql))
    {
        $sql_products[$r['Name']] = $r;
    }
    foreach($products as $v)
    {
        if(array_key_exists($v,$sql_products))
        {
            echo $v . " - £" . $sql_products[$v]['Price'];
        }
    }
}
于 2013-09-18T16:43:16.567 回答