Различие между циклами

Я думаю, вам будет лучше содержать данные таблицы в коллекции, такой как список, и вернуть список из класса Java и повторно использовать эту коллекцию в JSP.

6
задан Teifion 22 August 2008 в 16:32
поделиться

11 ответов

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

Операторы в этом для блока цикла будут работать 10 раз, значение $i будет от 0 до 9;

for ($i = 0; $i < 10; $i++)
{
        # code...
}

То же самое сделано с циклом с условием продолжения:

$i = 0;
while ($i < 10)
{
    # code...
    $i++
}

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

do
{
        # code...
}
while ($flag == false);

foreach привык к элементам массива доступа от запуска для окончания. В начале цикла foreach внутренний указатель массива установлен на первый элемент массива, на следующем шаге он установлен на 2-й элемент массива и так далее, пока массив не заканчивается. В блоке цикла значение объекта современного массива доступно как $value, и ключ текущего объекта доступен как $index.

foreach ($array as $index => $value)
{
        # code...
}

Вы могли сделать то же самое с циклом с условием продолжения, как это

while (current($array))
{
    $index = key($array);  // to get key of the current element
    $value = $array[$index]; // to get value of current element

    # code ...  

    next($array);   // advance the internal array pointer of $array
}

И наконец: Руководство PHP является Вашим другом :)

10
ответ дан 8 December 2019 в 18:44
поделиться

Это - CS101, но так как никто больше не упомянул это, циклы с условием продолжения оценивают свое условие перед блоком кода и делают - в то время как оценивает после блока кода, таким образом, циклы с условием продолжения, как всегда гарантируют, выполнят свой блок кода, по крайней мере, однажды, независимо от условия.

1
ответ дан 8 December 2019 в 18:44
поделиться
1
ответ дан 8 December 2019 в 18:44
поделиться

Я использую первый цикл при итерации по стандартному (индексированный?) массив и цикл foreach при контакте с ассоциативным массивом. Это просто кажется естественным и помогает коду течь и быть более читаемым, по-моему. Что касается делают... циклы с условием продолжения, я использую их, когда я должен сделать, больше, чем просто просматривают массив.

Я не уверен ни в каких выигрышах в производительности, все же.

0
ответ дан 8 December 2019 в 18:44
поделиться

@brendan:

Статья, которую Вы процитировали, серьезно устарела, и информация является просто неправильной. Особенно последняя точка (использование for вместо foreach) вводит в заблуждение и выравнивание, предлагаемое в статье больше, не относится к современным версиям.NET.

В то время как это верно что IEnumerator виртуальные вызовы использования, они могут на самом деле быть встроены современным компилятором. Кроме того.NET теперь знает дженерики и перечислители со строгим контролем типов.

Существует много тестов производительности там, которые доказывают окончательно это for обычно не быстрее, чем foreach. Вот пример.

1
ответ дан 8 December 2019 в 18:44
поделиться

Производительность не значительно лучше ни в одном случае. В то время как полезно для более сложных задач, чем итерация, но for и while функционально эквивалентны.

Foreach хорошо, но имеет один важный протест: Вы не можете изменить счетное, которого Вы выполняете итерации. Так никакое удаление, добавление или замена записей в него. Изменение записей (как изменение их свойств) в порядке, конечно.

0
ответ дан 8 December 2019 в 18:44
поделиться

С циклом foreach копия исходного массива сделана в памяти использовать внутри.

Foreach хорош, но имеет один важный протест: Вы не можете изменить счетное, которого Вы выполняете итерации.

Оба из тех не будут проблемой, если Вы передадите ссылкой вместо значения:

 foreach ($array as &$value) {

Я думаю, что это было позволено начиная с PHP 5.

0
ответ дан 8 December 2019 в 18:44
поделиться

Каждая конструкция цикличного выполнения служит различной цели.

для - Это используется для цикличного выполнения для определенного количества повторений.

foreach - Это используется для цикличного выполнения через все значения в наборе.

в то время как - Это используется для цикличного выполнения, пока Вы не удовлетворяете условию.

Из этих трех, "в то время как", скорее всего, обеспечит лучшую производительность в большинстве ситуаций. Конечно, если Вы делаете что-то как следующее, Вы в основном переписываете "для" цикла (который в c# немного более производителен).

$count = 0;
do
{
   ...
   $count++;
}
while ($count < 10);  

У них всех есть различные основные цели, но они могут также использоваться несколько тем же способом. Это полностью зависит от определенной проблемы, которую Вы пытаетесь решить.

0
ответ дан 8 December 2019 в 18:44
поделиться

С циклом foreach копия исходного массива сделана в памяти использовать внутри. Вы не должны использовать их на больших структурах; простым для цикла является лучший выбор. Можно использовать некоторое время цикл более эффективно на большой нечисленно индексируемой структуре как это:

while(list($key, $value) = each($array)) {

Но тот подход особенно ужасен для простой маленькой структуры.

циклы с условием продолжения лучше подходят для цикличного выполнения через потоки, или как в следующем примере, который Вы видите очень часто в PHP:

while ($row = mysql_fetch_array($result)) {

Почти все время, различные циклы являются взаимозаменяемыми, и это сведется к любой a) к эффективности, или b) ясности.

Если Вы знаете компромиссы эффективности различных типов циклов, то да, для ответа на исходный вопрос: используйте тот, который смотрит самое чистое.

0
ответ дан 8 December 2019 в 18:44
поделиться

При доступе к элементам массива для ясности я использовал бы foreach, когда это возможно, и только использовать для того, если Вам нужны фактические индексные значения (например, тот же индекс в нескольких массивах). Это также сводит к минимуму вероятность для ошибок опечатки, так как для циклов делают это слишком легким. В целом PHP не мог бы быть местом вызвать беспокойство слишком много о производительности. И наконец, что не менее важно, для и foreach имеют (или должен иметь; я не PHP-er) то же Большое-O время (O (n)), таким образом, Вы возможно смотрите на небольшое количество больше использования памяти или небольшой постоянный или линейный хит вовремя.

0
ответ дан 8 December 2019 в 18:44
поделиться

В отношении производительности foreach больше использует, чем для

http://forums.asp.net/p/1041090/1457897.aspx

0
ответ дан 8 December 2019 в 18:44
поделиться
Другие вопросы по тегам:

Похожие вопросы: