Javascript-форум (https://javascript.ru/forum/)
-   Серверные языки и технологии (https://javascript.ru/forum/server/)
-   -   Как while перевести в for + сортировка (https://javascript.ru/forum/server/6502-kak-while-perevesti-v-sortirovka.html)

Jekel 01.12.2009 00:14

Как while перевести в for + сортировка
 
Как на for это сделать, читал что while работает медленно иль чет в этом роде) Кстати еще прошу помочь с выводом допустим имен вподряд...но в строке не больше 10 имен должно быть, тоисть если в базе 30 имен то 3 ряда по 10 имен выводит.:blink:
$result = mysql_query("SELECT * FROM users"); 

while ($row = mysql_fetch_array($result)){ 
    echo 'name '.$row['name']; 
}

Gvozd 01.12.2009 00:28

Цитата:

Сообщение от Jekel
Как на for это сделать, читал что while работает медленно иль чет в этом роде)

слышал звон, да не знаешь где он
это незачем переделывать на for
Цитата:

Сообщение от Jekel
Кстати еще прошу помочь с выводом допустим имен вподряд...но в строке не больше 10 имен должно быть, тоисть если в базе 30 имен то 3 ряда по 10 имен выводит

$result = mysql_query("SELECT * FROM users"); 
$counter=0;
while ($row = mysql_fetch_array($result)){ 
    echo 'name '.$row['name'].' ';
if($counter++%10==9)
    echo '<br>';
}

Jekel 01.12.2009 00:31

:blink: и чего я не додумался просто <br> перенести))))) Спасибо большое....

Jekel 01.12.2009 10:49

Очень интересно как на for сделать этот же код :)

Gvozd 01.12.2009 15:18

Цитата:

Сообщение от Jekel
как на for сделать этот же код

как-как!
через задницу, блин
держи
$result = mysql_query("SELECT * FROM users"); 
for($i=0,$s=mysql_num_rows($result);$i<$s;$i++){
    $row = mysql_fetch_array($result);
    echo 'name '.$row['name']; 
}

PS это код наверняка медленнее, чем c while
PPS за оторванные конечности я ответственности не несу

Kolyaj 01.12.2009 15:28

$result = mysql_query("SELECT * FROM users"); 

for ($counter=0; $row = mysql_fetch_array($result); $counter++) { 
    echo 'name ' . $row['name'] . '&nbsp;';
    if($counter % 10 == 9)
        echo '<br>';
}
И ничего не медленней.

Gvozd 01.12.2009 17:00

Цитата:

Сообщение от Kolyaj
И ничего не медленней.

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

Kolyaj 01.12.2009 17:05

Цитата:

Сообщение от Gvozd
то есть for-когда известно количество итераций, а while-когда неизвестно количество итераций, но известно другое условие выхода

Это домыслы.

Gvozd 01.12.2009 17:26

пусть так
это мое видение правильного кода

e1f 01.12.2009 18:43

Цитата:

Сообщение от Kolyaj (Сообщение 36918)
Это домыслы.

+1. В перле for используется для пробежки по массиву, когда о каунтере вообще речь не идет.

Gvozd 01.12.2009 20:40

e1f,
можно пример кода, как это там выглядит?

e1f 01.12.2009 20:43

for my $item (@items) {
    # do something
}

Gvozd 01.12.2009 21:15

так я и думал
это не счетчик с циклом, а совместный цикл, предназначенный для перебора элементов хэш-массива
с таким же успехом мог перевести тему на javascript, и сказать что в цикле for...in нету никаких счетчиков.
или написать свой язык в котором конструкцией for обозначается что-угодно
когда я писал об уместности употребления именно цикла со счетчиком, который в PHP записывается как for(;;)
то, что ты перескочил на другую синтаксическую структуру из другого языка - это хреновый аргумент.
даже хуже чем привел Kolyaj в данном обсуждении
Былинный отказ десу!

Kolyaj 01.12.2009 22:08

Цитата:

Сообщение от Gvozd
даже хуже чем привел Kolyaj в данном обсуждении

Я не приводил никаких аргументов, я сказал, что ты хреновые привел :)

В данном конкретном случае for уместней, тем более, что даже счетчик есть.

Gvozd 01.12.2009 22:16

Цитата:

Сообщение от Kolyaj
Я не приводил никаких аргументов, я сказал, что ты хреновые привел

Да, я в курсе)
именно к этому я и отсылаю

e1f 02.12.2009 01:54

Цитата:

Сообщение от Gvozd (Сообщение 36929)
так я и думал
это не счетчик с циклом, а совместный цикл, предназначенный для перебора элементов хэш-массива

ЩИТО? Учите матчасть (aka perl) @items -- именно массив, а ни вкоем случае ни хэш-массив. Хэш -- это %items, и перебор его ключей есть
Код:

for my $item (keys %items)
значений соответственно
Код:

for my $item (values %items)
Отказ не принят :)

Gvozd 02.12.2009 02:24

Цитата:

Сообщение от e1f
@items -- именно массив

да, хоть объект содержащий свойства.
все суть контейнер.
без контейнера эта синтаксическая конструкция не употребляется.
точно также как foreach($array as $key=>$value) (PHP) или for(key in array) (JS)
если нету array-а, то и конструкции эти использовать нельзя.

или в Perl цикл со счетчиком, и цикл для перебора индексов/ключей/свойств есть одна синтаксическая структура?
что-то не верится

но даже если это так, я изначально говорил прежде всего о PHP
не о JS(хотя для него тут мое мнение такое же)
не о C(в нем я наоборот часто себе позволяю использование циклов "не по правилам", в связи с разностью областей моего личного их знания и применения)
не о Perl, в котором я не специалист
не о Brainfuck в котором один вид цикла/условия, и не может быть вопроса "что использовать"(зато вопрос "как сделать" возникает)))

PS непринятие отказа отклонено :)

e1f 02.12.2009 10:01

Цитата:

Сообщение от Gvozd (Сообщение 36944)
или в Perl цикл со счетчиком, и цикл для перебора индексов/ключей/свойств есть одна синтаксическая структура?

Бинго! ;)
Цитата:

Сообщение от Gvozd (Сообщение 36944)
но даже если это так, я изначально говорил прежде всего о PHP

Ну, из заявления
Цитата:

Сообщение от Gvozd (Сообщение 36944)
так как считаю, что для простейших задач циклы должны использоваться так, как это изначально предполагается, то есть for-когда известно количество итераций, а while-когда неизвестно количество итераций, но известно другое условие выхода

сложно судить, о языке именно идет речь, спор скорее о методологии программирования :)

А насчет JS, так я часто использую, к примеру, for таким вот образом:
for (var i = array.length; i--; ) {
    // do something
}

Не надо кешировать/перезапрашивать длину, экономим на условии <. Тоже неправильный, по-вашему, подход к for'у?

P.S. Все равно отказ не принят :)

Gvozd 02.12.2009 20:42

Цитата:

Сообщение от e1f
Бинго!

блин, ну мне даже интересно, как же именно в перле записывается цикл со счетчиком. напиши, пожалуйста
Цитата:

Сообщение от e1f
Ну, из заявления... ...сложно судить, о языке именно идет речь

Это следует из изначальной темы, хотя, мы уже плавно перешли в офффтоп
Цитата:

Сообщение от e1f
Тоже неправильный, по-вашему, подход к for'у?

Бинго!:)
просматривая код вскользь между строк, не скажешь сразу, что этот цикл делает и в каком порядке.
в отличии от наверняка и всеми узнаваемой конструкции
for(i=0;i<arr.length;i++)

e1f 02.12.2009 23:45

Цитата:

Сообщение от Gvozd (Сообщение 37022)
блин, ну мне даже интересно, как же именно в перле записывается цикл со счетчиком. напиши, пожалуйста

Ты не поверишь :)
Код:

for ( my $i = 0 ; $i < @items ; $i++ ) {
    # do
}

либо ( for и foreach -- полностью взаимозаменяемы )
Код:

foreach ( my $i = 0 ; $i < @items ; $i++ ) {
    # do
}



Часовой пояс GMT +3, время: 04:38.