Разбивка на колонки

usascha

Новичок
Разбивка на колонки

Есть такой кусок кода:
PHP:
$half = ceil(count($result)/2);
echo "<table border=1><tr valign=top><td><ol>";
while(list($author, $books) = each($result)) {
	echo
"<li><a href=author.inc.php?author_name=$author');>".$author."</a> - ".$books;
	if (++$i==$half) echo "</ol></td><td><ol>";
	}
echo "</tr></table>";
Полазил по сайту кое-что нашел. Но не нашел аналогичного примера, когда вывод делается из массива (состоит из author-books). Как смог адаптировал, но в результате выводятся две колонки причем первая - 22 строки, вторая - 161.

В чем причина?
 

tashkentchi

Новичок
"each (array array) Возвращает текущую пару ключ/значение из массива array и продвигает указатель массива вперёд"

Где у тебя текущий указатель находился при первом прогоне цикла?
 

usascha

Новичок
tashkentchi
перед $half идет:
array_multisort($result, SORT_NUMERIC, SORT_DESC);

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

при таком варианте if(!(++$i%$half))

выводит три колонки 22, 92 и 69 элементов. :confused:
 

Фанат

oncle terrible
Команда форума
Причина в том, что ты адаптировал.
То есть, писал не сам.
Как следствие - не понимаешь, как работает.
Как следствие - ты не можешь применять отладку, как способ узнать причину.
Если бы понимал, если бы знал, какие значения должны иметь переменные, то простоым выводом переменных на экран, сразу бы понял, где ошибка.

А так - да, остаётся только ждать, когда дядя на форуме догадается
 

Serguitar

Новичок->продвинутый
usascha
при таком варианте if(!(++$i%$half))

выводит три колонки 22, 92 и 69 элементов.
Почему не пытался подумать?
Почему твой код может выдавать всё ИМЕННО так, как у тебя не пытался вдуматься? Попробуй, говорят, программистам, пусть и начинающим, иногда полезно думать!
 

usascha

Новичок
Вот я ту по совету попробовал подумать и написал так:

if(!(++$result['author']%$half))

В результате получил две равных колонки - вроде бы как и хотел, но при этом после первого значения выводит ошибку: Notice: Undefined index: author in ...

Хотябы поясните на что смотреть, про что читать!
 

bgm

&nbsp;
Читать - мануал.
А ещё - просто думать. Медленно и печально думать. :(
 

usascha

Новичок
Serguitar
count(result) выводит 183 элемента, half, соответственно, 92.

bgm
какой именно мануал. я уже все про массивы просмотрел. пока не пойму, что не так.
 

bgm

&nbsp;
Читать - про отладку программ здесь:
http://phpfaq.ru/debug

В цикле не выводи ничего, кроме $author, $books, $i - и смотри какие значения на каждой строчке. И почему они такие.
 

usascha

Новичок
bgm
спасибо за помощь. Хотя и не быстро, но додумался: надо было обнулить счетчик массива: $i=0. Теперь формирует столько колонок сколько нужно.
 
Сверху