Теория вывода

Mad Dogg

Новичок
Теория вывода

Всем здрасьте.
Есть у меня такая маленькая функция.

PHP:
<?php
function news_print ($cat_id=false) {
	$cat_id=intval($cat_id);
	if (!$cat_id || $cat_id==0) {
		$sql="select top 10 * from dbo.news order by dbo.news.date desc";
		$result=mssql_query($sql);
		if (@mssql_num_rows($result)>0) {
			while ($news=@mssql_fetch_assoc($result)) {
				if ($news[expire_date]<time()) continue;
				$date[]=date("d.m.y", $news[date]);
				$name[]=$news[name];
				$description[]=$news[description];
				$id[]=$news[id];
			}
			$columns = 2;
			$formatted_date=array_chunk($date, ceil(count($date) / $columns));
			$formatted_name=array_chunk($name, ceil(count($name) / $columns));
			$formatted_description=array_chunk($description, ceil(count($description) / $columns));
			$formatted_id=array_chunk($id, ceil(count($id) / $columns));
			$count_1st=count($formatted_name[0]);
			$count_2st=count($formatted_name[1]);
			echo "<div style='float:left; position:relative; width:50%'>";
			for ($i=0; $i<$count_1st; $i++) {
				news_template($formatted_date[0][$i], $formatted_name[0][$i], $formatted_description[0][$i], $formatted_id[0][$i]);
			}
			echo "</div>";
			echo "<div style='float:left; position:relative; width:50%'>";
			for ($i=0; $i<$count_2st; $i++) {
				news_template($formatted_date[1][$i], $formatted_name[1][$i], $formatted_description[1][$i], $formatted_id[1][$i]);
			}
			echo "</div>";
		}
    }
}
?>
В ней все просто. Получает cat_id, ищет его в базе и выводит. Только в функции использовано 2 цикла.
Функция news_template просто выводит в нужном месте табличку с переданными в нее данными.

У меня вопрос. Даже два вопроса. Можно ли усовершенствовать функцию так, чтобы использовался только один цикл, и если да, то как это сделать ?
 

AmdY

Пью пиво
Команда форума
можно, но необязательно, а вот
PHP:
if ($news[expire_date]<time()) continue;
я бы обязательно оптимизировал. во первых у тебя не выводятся нотисы, сделай error_reporting(E_ALL), поставь кавычки в 'expire_date' и в других местах, если эта не константы. во торых зачем тащить лишние данные, чтобы потом их в цикле выбрасывать, можно сразу поставить условие в запросе.
 

Mr_Max

Первый класс. Зимние каникулы ^_^
Команда форума
Переезжаем
 

Mad Dogg

Новичок
Krishna, я знал это )))
AmdY, странно, но в последнее время я в исходниках постоянно вижу именно такой способ вывода значений массива. т.е. не ставятся кавычки. А какая разница, в кавычках индекс или нет ?

-~{}~ 06.02.09 09:27:

PHP:
if ($news[expire_date]<time()) continue;
Я таким образом тупо вывожу данные, в которых дата публикации уже просрочена.
Мне это показалось самым простым методом.
 

Mad Dogg

Новичок
Но совету последовал.

-~{}~ 06.02.09 09:41:

Автор оригинала: *****
у окулиста давно не был?
Давно. Спасибо за то что интересуетесь здоровьем.

-~{}~ 06.02.09 09:42:

блииин. сколько нотайсов... О_О
 

Фанат

oncle terrible
Команда форума
Было бы лучше, если бы сначала ты его понял.
И советов было два.

-~{}~ 06.02.09 09:48:

Сходи, проверься.

Насколько я понял, два цикла и вся подготовительная работа для них нужны только потому, что ты не догадался вывести две строчки с дивами внутри одного и того же цикла.
Это никак не лечится, понимание смысла своих действий - цикла, в данном случае - приходит с опытом. Или не приходит совсем.
 
Сверху