2013-09-18 4 views
0

Возможно ли перезапустить цикл while? В настоящее время у меня есть цикл 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; 
      } 
     } 
    } 
} 

Моя проблема возникает, когда выполняется код, и он производит Milk и Eggs, но в базе данных Cheese предшествует Eggs, и поэтому он никогда не кажется, чтобы найти. Как перезапустить цикл while, чтобы заставить код проверять каждое значение с начала SQL-запроса?

SOLVED: Используется хэширование для запроса вместо цикла sql.

+1

почему перезапуск, что в то время как цикл, первая выборка всех данных в массив и делать как обычные внутренние петли –

+0

@MansoorkhanCherupuzha Я никогда не получаю данные в массив? Я предполагаю, что запустил цикл while, а затем - foreach ($ row) внутри, что вы имеете в виду? –

ответ

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']; 
     } 
    } 
} 
+0

Я предполагаю, что это несколько похоже на то, что сказал @MansoorkhanCherupuzha? похоже, хранит его в массиве? –

+1

Да, похоже. Но использование хеша, а не массива, поэтому поиск выполняется намного быстрее. –

+1

@MikeShaw, да, это то, что я имею в виду –

Смежные вопросы