Цикл Foreach против результатов цикла

У меня немного дилемма: в PHP как цикл foreach, так и цикл while, похоже, делают то же самое в этой ситуации:

foreach($execute->result as $item){
    echo $item['user_pass'].'<br />';
}

и

while($row = mysqli_fetch_assoc($execute->result)){
    echo $row['user_pass'].'<br />';
}

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

Ответ 1

В этом случае они в точности эквивалентны. mysqli_result реализует интерфейс Traversable (как описано здесь: http://www.php.net/mysqli_result), поэтому его можно повторить с помощью цикла foreach as хорошо.

Я предполагаю, что внутренне вызов foreach в объект mysqli_result также выполняет вызовы mysqli_fetch_assoc.

Я не думаю, что имеет значение использовать первый метод или второй; однако, первый выглядит красивее и "больше PHP5" для меня!
Говоря об гибкости, первая, безусловно, более гибкая, так как вы можете использовать этот код с любым объектом, который реализует Traversable, а не только mysqli_result.

Ответ 2

Я нашел это:

для vs foreach vs, в то время как быстрее для итерации через массивы в php

В ответе говорится, что разница в скорости настолько минимальна, что вряд ли имеет значение, что вы используете. Я бы сказал, используя самый быстрый цикл, потому что эффективность всегда важна. Даже если вы избегаете правильной петли, вы нанесете вред своим пользователям, а затем закончите более длительное время загрузки. секунд в секунду. Они делают дни и месяцы в конце концов.

Мне нравится использовать foreach loop для итерации по возвращенной информации, потому что у меня есть доступ к ключам и значениям, которые могут быть удобными в зависимости от необходимого использования.

$returned = array(array("userName" => "Tim"),array("userName" => "Bob"), array("userName" => "Guy"));

foreach($returned as $L1)
{
  foreach($L1 as $L2 => $val)
  {
      if($L2 === "userName")
      {

         echo 'Hello: ' . $val . "<br />";

      }

  }

}

Я думаю, это зависит от того, какие значения вам нужны, сколько вам нужно управления и где вам это нужно.