|
|
|
| Привет.
есть массив дат.
например:
Array
(
[0] => 15.01.2011
[1] => 25.01.2011
[2] => 26.01.2011
[3] => 19.02.2011
[4] => 24.02.2011
[5] => 26.02.2011
)
|
эти даты нужно выводить в таком виде:
15.01.,25.01., 26.01.2011
19.02.,24.02., 26.02.2011
|
то есть их нужно разбить, чтобы они выводились по месяцам. Каждый месяц с новой строки. | |
|
|
|
|
|
|
|
для: *m*
(08.02.2011 в 16:22)
| | А массив всегда сортирован от меньших к большим датам? | |
|
|
|
|
|
|
|
для: *m*
(08.02.2011 в 16:22)
| | Надо было даты представлять как ГГГГ.ММ.ДД, и проблем лишних бы не было, ведь представить их при выводе так как вы показываете, труда бы тоже не составило. От куда они у вас, даты эти? | |
|
|
|
|
|
|
|
для: sim5
(08.02.2011 в 16:26)
| | ну изначально при выборке из БД они в правильном виде гггг-мм-дд
их можно как угодно представить, и в принципе отсортировать от меньшей к большей.
просто их нужно выводить в цикле, тут я для примера просто написал.
мне в итоге нужно получить во такой вывод:
15.01.,25.01., 26.01.2011
19.02.,24.02., 26.02.2011
|
| |
|
|
|
|
|
|
|
для: *m*
(08.02.2011 в 16:34)
| | Ну тогда какие проблемы:
Устанавливаете переменную вне цикла.
В цикле проверяете - если она пуста или не равна месяцу даты текущей итерации, то помещаем месяц этой даты в переменную и выводим перевод строки.
Вывод даты.
Кстати, это прямо при разложении ресурса можно делать, не вынося ради этого даты в массив. | |
|
|
|
|
|
|
|
для: sim5
(08.02.2011 в 16:37)
| | плиз дайте пример, я уже голову сломал, никак не соображу. | |
|
|
|
|
|
|
|
для: *m*
(08.02.2011 в 16:52)
| | :))
Когда-то тут была тема "Алфавитный рубрикатор", я там все подробно рассказывал. А вам ведь тоже самое надо, и все просто до смешного. Отвлекитесь пока от дат, рассмотрите простой пример - вам надо вывести:
1 1 1 1 1
2 2 2 2 2
и т.д.
И так, если вам надо знать, пора ли переходить на новую строку, что вы будете делать? Конечно же проверять, а равно ли выводимое число числу, которое уже находится в строке. Так ведь?
Вот оно и решение:
<?
$num = 0;
for(...) {
if(!$num || $num != $n) {
$num = $n;
echo "<br>"
}
echo $n
}
| где $n - текущее число из массива выводимого. То же самое и с датой, только проверять нужно месяц в ней, а для этого есть готовые функции. Вот и все. Проверьте с единичками и двойками, убедитесь сами. | |
|
|
|
|
|
|
|
для: *m*
(08.02.2011 в 16:34)
| | Можно поступить следующим образом
<?php
$dates = array
(
0 => "15.01.2011",
1 => "25.01.2011",
2 => "26.01.2011",
3 => "19.02.2011",
4 => "24.02.2011",
5 => "26.02.2011"
);
$result = array();
$mth = "";
$end = "";
for($i = 0; $i < count($dates); $i++)
{
list($day, $month, $year) = explode(".", $dates[$i]);
if($mth != "$month.$year")
{
if(!empty($mth)) $result[$mth] .= $end;
$mth = "$month.$year";
$end = "$day.$month.$year";
}
else
{
$result[$mth] .= "$day.$month, ";
}
}
$result[$mth] .= $end;
echo "<pre>";
print_r($result);
echo "</pre>";
?>
|
PS Но вообще на уровне базы данных этот вопрос решить проще и дешевле в плане производительности. | |
|
|
|
|
|
|
|
для: cheops
(08.02.2011 в 16:37)
| | ага, ну вот и sim5 говорит. я пол дня просидел результата ноль..
а вот это Ваш метод действенный, спасибо. Вот только получается, мне этот массив в итоге нада обходить и выводить опять както в цикле.. | |
|
|
|
|
|
|
|
для: *m*
(08.02.2011 в 16:57)
| | Это уже не сложно
<?php
foreach($result as $key => $value) echo "$value<br />";
?>
|
| |
|
|
|
|
|
|
|
для: cheops
(08.02.2011 в 16:59)
| | )) да нее не я не об этом, я к тому что и правда очень нагроможденно получается..
то есть можно как то и такой вывод организовать сразу после выборки..
кстати в Вашем примере в итоге, даты выводятся в хронологии, а не как изначально было от меньшей к большей..)
за Ваш пример еще раз спасибо, он все равно мне пригодиться. | |
|
|
|
|
|
|
|
для: *m*
(08.02.2011 в 17:03)
| | >то есть можно как то и такой вывод организовать сразу после выборки..
Это нужно ваш дамп вашей таблицы смотреть, желательно в новой теме и в разделе MySQL :))) | |
|
|
|
|
|
|
|
для: cheops
(08.02.2011 в 17:09)
| | разобрался спасибо) | |
|
|
|