00:07 

Помогите с функцией

Plexx
Есть таблица
date title

подскажите функцию которая бы разбивала новости на дни.
т.е.

5 октября
---------
title1

6 октября
----------
title2
title3
title4

7 октября
-----------
title5

@темы: PHP, Вопросы

Комментарии
2010-10-10 в 00:14 

chipp
главное ебашилово, мои дорогие)
function your_functions_name?

2010-10-10 в 00:17 

--==SS==--
Sanctus Satanas
А в чём проблема-то?

2010-10-10 в 00:20 

Plexx
не могу вывести именно так как написал выше.

как мне разбить новости по дням?

2010-10-10 в 00:21 

Plexx
нужно выделить дату сегодня вчера и т.д а ниже каждой даты новости которые созданы в это время

2010-10-10 в 00:34 

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

2010-10-10 в 00:43 

Crazy Wizard
Псих
я бы вытянул нужное кол-во записей, печатал бы заголовки подряд, как только в цикле дата меняется, то закрываем блок, пишем новую дату, открываем блок, запоминаем текущую дату и опять печатаем подряд, пока дата не поменяется. Как-то так, если я правильно понял вопрос. Или вопрос "Как вытянуть только вчерашние записи", "только на n октября"?

2010-10-10 в 00:44 

--==SS==--
Sanctus Satanas
Ну, например, так:

$prevdate = '';

foreach ($news as $date => $text) {
    if ($date != $prevdate) {
        echo '<div>' . $date . '</div>';
    }

    echo '<div>' . $text . '</div>';

    $prevdate = $date;
}

2010-10-10 в 00:49 

Мохнорыл
маленькое щячло
Поиграйся с функциями пхп date() и strtotime().
Что-то примерно такое:
foreach($object_with_titles_and_date as $object){
$last_date = date("m-d", $object->date);
if(date("m-d", $object->date) != $last_date){
//новый блок, пишем новый день, выводим титл
}else{
//выводим титл
}
}

2010-10-10 в 03:30 

--==SS==--
Sanctus Satanas
Или даже так…

$result = mysql_query('SELECT date, text FROM site_news');

$news = array();

while ($row = mysql_fetch_array($result)){
    $news[$row['date']][] = $row['text'];
}

// В массиве $news теперь примерно такое:
//
// array(
// '2010-10-10' => array(
// 'Новость 1',
// 'Новость 2',
// 'Новость 3',
// ),
// '2010-10-11' => array(
// 'Новость 4',
// 'Новость 5',
// 'Новость 6',
// ),
// ),

foreach ($news as $date => $items){
    echo '<div>' . $date . '</div>';

    foreach ($items as $text){
        echo '<div>' . $text . '</div>';
    }
}

2010-10-10 в 14:07 

Мохнорыл
маленькое щячло
$news[$row['date']][] = $row['text'];
О, интересненько!
Но это сработает только если дата проставляется не через таймштамп. Но в противном случаи тут как раз бы и пригодилось date("m-d", $date);

2010-10-10 в 16:11 

Plexx
Спасибо попробую реализовать

2010-10-10 в 16:43 

Plexx
--==SS==-- ваш способ получился.

Только немогу к каждой новости приписать время.

$row['date'] = strtotime($row['date']);

$date = date("d m Y", $row['date']);
$time = date("H:i", $row['date']);

$news[$date][$time] = $row['title'];

где в foreach приписать время к новости?

2010-10-10 в 19:02 

--==SS==--
Sanctus Satanas
Мохнорыл
Дык это…
Вариант 1a: date('m-d', strtotime($date)).
Вариант 1b: SELECT UNIX_TIMESTAMP(datetime) AS date, затем date('m-d', $date).
Вариант 1c: substr($date, 0, 10).
Вариант 2: SELECT DATE(datetime) AS date, TIME(datetime) AS time.

Plexx
Помещать в элементы массива не сразу текст, а массив.

$news[$row['date']][] = array(
    'time' => $row['time'],
    'text' => $row['text'],
);

2010-10-10 в 19:36 

Plexx
--==SS==--

$row['date'] = strtotime($row['date']);

$date = date("d m Y", $row['date']);
$time = date("H:i", $row['date']);

$news[$date][] = array('time' => $time, 'title' => $row['title']);

а в foreach то как выделить time и title?

2010-10-10 в 19:42 

Plexx
все разобрался echo '
' . $text[time]. $text[title] . '
';
Спасибо всем кто помогал.

     

Сообщество PHP программистов

главная