重新启动While循环

时间:2013-09-18 16:38:50

标签: php mysql foreach while-loop

是否可以重启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。

1 个答案:

答案 0 :(得分: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'];
        }
    }
}