Цикл 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 />";
}
}
}
Я думаю, это зависит от того, какие значения вам нужны, сколько вам нужно управления и где вам это нужно.