Я думаю, вам будет лучше содержать данные таблицы в коллекции, такой как список, и вернуть список из класса Java и повторно использовать эту коллекцию в JSP.
Поскольку цикл и Циклы с условием продолжения являются циклами начального условия. Они оценивают условие сначала, таким образом, блок операторов, связанный с циклом, не будет работать даже однажды, если условие не встретится
Операторы в этом для блока цикла будут работать 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 является Вашим другом :)
Это - CS101, но так как никто больше не упомянул это, циклы с условием продолжения оценивают свое условие перед блоком кода и делают - в то время как оценивает после блока кода, таким образом, циклы с условием продолжения, как всегда гарантируют, выполнят свой блок кода, по крайней мере, однажды, независимо от условия.
Я использую первый цикл при итерации по стандартному (индексированный?) массив и цикл foreach при контакте с ассоциативным массивом. Это просто кажется естественным и помогает коду течь и быть более читаемым, по-моему. Что касается делают... циклы с условием продолжения, я использую их, когда я должен сделать, больше, чем просто просматривают массив.
Я не уверен ни в каких выигрышах в производительности, все же.
@brendan:
Статья, которую Вы процитировали, серьезно устарела, и информация является просто неправильной. Особенно последняя точка (использование for
вместо foreach
) вводит в заблуждение и выравнивание, предлагаемое в статье больше, не относится к современным версиям.NET.
В то время как это верно что IEnumerator
виртуальные вызовы использования, они могут на самом деле быть встроены современным компилятором. Кроме того.NET теперь знает дженерики и перечислители со строгим контролем типов.
Существует много тестов производительности там, которые доказывают окончательно это for
обычно не быстрее, чем foreach
. Вот пример.
Производительность не значительно лучше ни в одном случае. В то время как полезно для более сложных задач, чем итерация, но for
и while
функционально эквивалентны.
Foreach
хорошо, но имеет один важный протест: Вы не можете изменить счетное, которого Вы выполняете итерации. Так никакое удаление, добавление или замена записей в него. Изменение записей (как изменение их свойств) в порядке, конечно.
С циклом foreach копия исходного массива сделана в памяти использовать внутри.
Foreach хорош, но имеет один важный протест: Вы не можете изменить счетное, которого Вы выполняете итерации.
Оба из тех не будут проблемой, если Вы передадите ссылкой вместо значения:
foreach ($array as &$value) {
Я думаю, что это было позволено начиная с PHP 5.
Каждая конструкция цикличного выполнения служит различной цели.
для - Это используется для цикличного выполнения для определенного количества повторений.
foreach - Это используется для цикличного выполнения через все значения в наборе.
в то время как - Это используется для цикличного выполнения, пока Вы не удовлетворяете условию.
Из этих трех, "в то время как", скорее всего, обеспечит лучшую производительность в большинстве ситуаций. Конечно, если Вы делаете что-то как следующее, Вы в основном переписываете "для" цикла (который в c# немного более производителен).
$count = 0;
do
{
...
$count++;
}
while ($count < 10);
У них всех есть различные основные цели, но они могут также использоваться несколько тем же способом. Это полностью зависит от определенной проблемы, которую Вы пытаетесь решить.
С циклом foreach копия исходного массива сделана в памяти использовать внутри. Вы не должны использовать их на больших структурах; простым для цикла является лучший выбор. Можно использовать некоторое время цикл более эффективно на большой нечисленно индексируемой структуре как это:
while(list($key, $value) = each($array)) {
Но тот подход особенно ужасен для простой маленькой структуры.
циклы с условием продолжения лучше подходят для цикличного выполнения через потоки, или как в следующем примере, который Вы видите очень часто в PHP:
while ($row = mysql_fetch_array($result)) {
Почти все время, различные циклы являются взаимозаменяемыми, и это сведется к любой a) к эффективности, или b) ясности.
Если Вы знаете компромиссы эффективности различных типов циклов, то да, для ответа на исходный вопрос: используйте тот, который смотрит самое чистое.
При доступе к элементам массива для ясности я использовал бы foreach, когда это возможно, и только использовать для того, если Вам нужны фактические индексные значения (например, тот же индекс в нескольких массивах). Это также сводит к минимуму вероятность для ошибок опечатки, так как для циклов делают это слишком легким. В целом PHP не мог бы быть местом вызвать беспокойство слишком много о производительности. И наконец, что не менее важно, для и foreach имеют (или должен иметь; я не PHP-er) то же Большое-O время (O (n)), таким образом, Вы возможно смотрите на небольшое количество больше использования памяти или небольшой постоянный или линейный хит вовремя.
В отношении производительности foreach больше использует, чем для