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

私の問題は、コードが実行されてMilkandEggsが生成されたときに発生しますが、データベースでは のCheeseEggsに来るため、決して見つからないようです。SQLクエリの開始から各値をコードに強制的にチェックさせるために、whileループを再開するにはどうすればよいですか?

解決済み: SQL をループする代わりに、クエリを実行するためにハッシュを使用しました。

4

1 に答える 1

2

SQL から何度も読み取るのではなく、クエリの結果を O(1) ルックアップのハッシュに格納するのが最善の策だと思います。

$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 に答える