[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Сортировка по датам
Страницы: 1, 2
Lenovo
Здравствуйте, у меня есть массив с датами (21.04.2014), (20.04.2014), (19.03.2015) и тд.. Можно их отсортировать чтоб вывелось так

(19.03.2015)
(21.04.2014)
(20.04.2014)

?
Игорь_Vasinsky
$arr = array(
'20.04.2014',
'19.03.2015',
'21.04.2014'
);

sort($arr);

echo '<pre>' . print_r($arr,1) . '</pre>';


<pre>Array
(
[0] => 19.03.2015
[1] => 20.04.2014
[2] => 21.04.2014
)
</pre>


_____________
HTML, CSS (Bootstrap), JS(JQuery, ExtJS), PHP, MySQL, MSSql, Posgres, (TSql, BI OLAP, MDX), Mongo, Git, SVN, CodeIgnater, Symfony, Yii 2, JiRA, Redmine, Bitbucket, Composer, Rabbit MQ, Amazon (SQS, S3, Transcribe), Docker
paul85
$arr = array(
'19.03.2015',
'21.02.2014',
'20.04.2014'
);


Короче вообще неправильно работает.
Lenovo


$arr = array(
'20.01.2011',
'20.04.2014',
'19.03.2015',
'21.04.2014'
);

sort($arr);

echo '<pre>' . print_r($arr,1) . '</pre>';


Array
(
[0] => 19.03.2015
[1] => 20.01.2011
[2] => 20.04.2014
[3] => 21.04.2014
)


Не работает как видите ( Ваш вариант я так понял сортирует по первым цифрам и последующим по порядку
AllesKlar
Lenovo
потому что это не даты, а хрень собачья в стрингах.

Сначала преобразуй к дате, потом сортируй без проблем Callback.
Либо в те же стринги, но ISO формат даты 'YYYY-MM-DD' и сортируй в лоб по-алфавиту, как сейчас.

_____________
[продано копирайтерам]
Lenovo
Цитата (AllesKlar @ 21.04.2015 - 23:00)
Lenovo
потому что это не даты, а хрень собачья в стрингах.

Сначала преобразуй к дате, потом сортируй без проблем Callback.
Либо в те же стринги, но ISO формат даты 'YYYY-MM-DD' и сортируй в лоб по-алфавиту, как сейчас.

спасибо
Zzepish
Ради интересе- кто вкурсе на тему алгоритма сортировки?
Он разбивает по точке, а потом пузырек\быстрая сортировка, или еще как-то?
AllesKlar
Zzepish
В мануале написано жежЪ
Цитата
Замечание: Как и большинство функций сортировки в PHP, sort() использует реализацию алгоритма » быстрой сортировки. .


_____________
[продано копирайтерам]
Zzepish
AllesKlar
о! Спасибо biggrin.gif
ЗлОй ПрОграММер
Как вариант
$arr = array(
'20.01.2011',
'20.04.2014',
'19.03.2015',
'21.04.2014'
);


function cmp($a, $b)
{
$a = preg_replace('/^(\d{2})\.(\d{2}).(\d{4})$/', '$3$2$1', $a);
$b = preg_replace('/^(\d{2})\.(\d{2}).(\d{4})$/', '$3$2$1', $b);
if ($a == $b) {
return 0;
}
return ($a < $b) ? -1 : 1;
}

usort($arr, "cmp");
print_r($arr);

но думаю он далеко не оптимальный
Kusss
ЗлОй ПрОграММер
вместо регулярки можно так
function cmp($a, $b)
{
$a = strtotime($a);
$b = strtotime($b);
if ($a == $b) {
return 0;
}
return ($a < $b) ? -1 : 1;
}
Valick
Цитата (Lenovo @ 21.04.2015 - 20:24)
у меня есть массив с датами

откуда он у вас? как формируется этот массив?

_____________
Стимулятор ~yoomoney - 41001303250491
Lenovo
Есть текстовые файлы типа



<h1>Фильм крутой (23.04.2015)</h1>
<p>
text</p>


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

Осторожно! Берегите глаза!


<?php

class
Poster{

function titl($dir){
$b = glob("$dir{*txt}", GLOB_BRACE);

$file = fopen($b[0],"r"); //Text
$text = fread ($file,9000);

preg_match('|<h1>(.*)</h1>|', $text, $titl);
return $titl[1];
}

function posted(){
$a = glob('file/*/', GLOB_ONLYDIR); //Ищем все папки в каталоге
$kol = count($a); //Число записей в массиве

for($i=0; $i<$kol; $i++) {

$dir = $a[$i];
$b = glob("$dir{*.jpg,*.png,*gif,*JPG,*txt,*torrent,*inf}", GLOB_BRACE); //Выбираем нужные форматы файлов по типу

$img = $b[0]; //images

$file = fopen($b[1],"r"); //Text
$text = fread ($file,1000);

$url = HOST.$b[2]; //Url torrent

$papka = glob($dir, GLOB_ONLYDIR); //путь к файлам

$in = fopen($b[3],"r"); //Text inf

$inf = fread ($in,1000);

//$papka = str_replace("file/", "", $papka);

require './tpl/index.tpl';
}
}


function post($dir){

$b = glob("$dir{*.jpg,*.png,*gif,*JPG,*txt,*torrent,*inf}", GLOB_BRACE); //Выбираем нужные форматы файлов по типу

$img = $b[0]; //images

$file = fopen($b[1],"r"); //Text
$text = fread ($file,9000);

$url = HOST.$b[2]; //Url torrent

$in = fopen($b[3],"r"); //Text inf

$inf = fread ($in,1000);

require './tpl/post.tpl';
}

function translit($name){
$tr = array("А"=>"a","Б"=>"b","В"=>"v","Г"=>"g", "Д"=>"d","Е"=>"e","Ж"=>"j","З"=>"z","И"=>"i", "Й"=>"y","К"=>"k","Л"=>"l","М"=>"m","Н"=>"n", "О"=>"o","П"=>"p","Р"=>"r","С"=>"s","Т"=>"t", "У"=>"u","Ф"=>"f","Х"=>"h","Ц"=>"ts","Ч"=>"ch", "Ш"=>"sh","Щ"=>"sch","Ъ"=>"","Ы"=>"yi","Ь"=>"", "Э"=>"e","Ю"=>"yu","Я"=>"ya","а"=>"a","б"=>"b", "в"=>"v","г"=>"g","д"=>"d","е"=>"e","ж"=>"j", "з"=>"z","и"=>"i","й"=>"y","к"=>"k","л"=>"l", "м"=>"m","н"=>"n","о"=>"o","п"=>"p","р"=>"r", "с"=>"s","т"=>"t","у"=>"u","ф"=>"f","х"=>"h", "ц"=>"ts","ч"=>"ch","ш"=>"sh","щ"=>"sch","ъ"=>"y", "ы"=>"yi","ь"=>"","э"=>"e","ю"=>"yu","я"=>"ya", " "=> "-", "."=> "", "/"=> "-");
$tr = strtr($name,$tr);
$tr = preg_replace('/[^A-Za-z0-9_\-]/', '', $tr);
$tr = strtolower($tr);
return $tr;
}


}

?>

Метод posted выводит на главную все посты, выводит в алфавитном порядке (по названию папки), а планирую по дате добавления или по году выхода фильма
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.