PDA

Просмотр полной версии : Вывод по алфавиту


GreenTiger
09.02.2008, 22:40
Проблема ужас...

$lines[$p] это строки в файле data.dat

Они такого формата

1|Требуются[ktname]Работа и бизнес|Хек[email]xxx@sfafs.ru|А это тема|П|Текст|07.02.2008|1203003302|2|vip |95881|1202398502||||||||Работа и бизнес|

В этом примере "А это тема" это название темы...

<?php

// БЛОК СОРТИРОВКИ
$p = $itogo;
$ivip=0;

while($p > 0)
{
$p--;
$dt = explode("|", $lines[$p]);
if($dt[9]=="vip")
{
$ivip++;
}
$newlines[$p]="$dt[9]|$dt[11]|$dt[0]|$dt[1]|$dt[2]|$dt[3]|$dt[4]|$dt[5]|$dt[6]|$dt[7]|$dt[8]|$dt[10]|$dt[12]|$dt[13]|$dt[14]|$dt[15]|$dt[16]|$dt[17]|$dt[18]|";
}

usort($newlines, "prcmp");

$p = $itogo;
while($p > 0)
{
$p--;
$dt=explode("|", $newlines[$p]);
$lines[$p]="$dt[2]|$dt[3]|$dt[4]|$dt[5]|$dt[6]|$dt[7]|$dt[8]|$dt[9]|$dt[10]|$dt[0]|$dt[11]|$dt[1]|$dt[12]|$dt[13]|$dt[14]|$dt[15]|$dt[16]|$dt[17]|$dt[18]|\r\n";
echo $lines[$p]."<br/>";
}

while($p > 0)
{
$p--;
$dt= explode("|", $newlines[$p]);
sort($dt[5]);
$slines[$p] = "$dt[3]|$dt[2]|$dt[4]|$dt[5]|$dt[6]|$dt[7]|$dt[8]|$dt[9]|$dt[10]|$dt[0]|$dt[11]|$dt[1]|$dt[12]|$dt[13]|$dt[14]|$dt[15]|$dt[16]|$dt[17]|$dt[18]|\r\n";
$s[] = $dt[5];
}

sort($s);

// КОНЕЦ сортировки


// Показываем QQ ОБЪЯВЛЕНИЙ
while($a1 > $u) {
$a1--;
$dt = explode("|", $lines[$a1]);

$num++;
$url="index.php?fid=$fid&id=$dt[10]";

if ($dt[4]=="П") {$colorsp="#ff3333";} else {$colorsp="#1414CD";}

$deldate=date("d.m.Y",$dt[7]); // конверируем дату удаления в человеческий формат
$tekdt=mktime();
$deldays=round(($dt[7]-$tekdt)/86400); // Дата удаления
$dt[5]=str_replace("<br>", "\r\n", $dt[5]);

// приводим слово ДЕНЬ/ДНЯ/ДНЕЙ - к нужному типу
$dney="дней"; if ($deldays=="0") {$deldays=1;}
if ($deldays>20) {$ddays=substr($deldays,-1);} else {$ddays=$deldays;}
if ($ddays=="1") {$dney="день";}
if ($ddays=="2" or $ddays=="3" or $ddays=="4") {$dney="дня";}

sort($dt[3]);
if ($dt[9]=="vip") {print "<TR height=28 class=vip onmouseout=\"vipout(this)\" onmouseover=\"vipover(this)\">";}
else {print "<TR height=28 class=row1 onmouseover=\"trtover(this)\" onmouseout=\"trtout(this)\">";}

if (stristr($dt[2],"[email]"))
{
$tdt=explode("[email]", $dt[2]);
$dt[2]="$tdt[0]";
$usdat="<TD onclick=\"LmUp('$url')\">$dt[2]";
}
else
{
$usdat="<TD onmouseover=\"tover(this)\"
onmouseout=\"tout(this)\"
onclick=\"LmUp('tools.php?event=profile&pname=$dt[2]')\">
<A href='tools.php?event=profile&pname=$dt[2]'>$dt[2]</A>";
}

print"
<TD align=center><B>$num</B></TD>
<TD><FONT color=$colorsp><B>$dt[4]</B></FONT></TD>
<TD onmouseover=\"tover(this)\" onclick=\"LmUp('$url')\" onmouseout=\"tout(this)\">
<A href='$url' title='$dt[5]'>";
if ($dt[9]=="vip")
{print"<B>$dt[3]</B>";}
else
{print"$dt[3]";} print"</A></TD>
$usdat</TD>
<TD align=center onclick=\"LmUp('$url')\"> $dt[6]</TD>
<TD onclick=\"LmUp('$url')\">$deldate - через <B>$deldays</B> $dney </TD></TR>";

if (($dt[9]=="vip") and ($ivip==1)) {print"<TR height=15 class=small bgColor=#FFFFFF><TD colspan=6>&nbsp;</TD></TR>";}
$ivip--;

if ($dt[4]=="С") {$itogos++;}

}
?>

Вообщем здесь вывод разделов...
На строке
if ($dt[9]=="vip") {print"<B>$dt[3]</B>";} else {print"$dt[3]";} print"</A></TD>

$dt[3] это название темы...

Так вот...этим кодом на странцие выводятся темы по дате создания...мне необходимо чтобы они выводились по алфавиту..

Запарился уже менять все...

Там где sort($s) это я сам писал..так вот в этом $s названия тем по алфавиту норм..но я не смог вывести это по алфавиту ((

Помогите пожалйста..

bul.666
09.02.2008, 22:43
sort($des) - Сортирует элементы масива по возростанию
rsort($des) - по убыванию
ksort($des) - сортирует ключи массива по возростанию
krsort($des) - ключи по убыванию

Вот пример:


<?php
$mass = array("З","А","Я","М");

sort($mass);

foreach($mass as $str) {
echo $str."<br>";
}
?>


Вывод будет:

А
З
М
Я

GreenTiger
09.02.2008, 22:49
Я знаю что значат все эти функции...
Сама проблема в коде..надо в правильном месте выставить....

bul.666
09.02.2008, 22:52
Вообще в данном случае все очень запарно...

Можно сделать все намного легче с MySQL...

Вообще хз, но нужно вывести в отдельный массив все названия тем, сортировать его по алфавиту, подом перебирая этот массив в цикле выводить основной массив, где встречаеться эта тема...
Гемор

GreenTiger
09.02.2008, 22:56
Нет не мой...я не юзаю файлы

Doom123
09.02.2008, 23:12
А если
if($dt[9]=="vip")
{
$ivip++;
}

заменить на


if($dt[9]=="vip")
{
$ivip++;
$theme[] = $dt[3];
}



А потом при выводе $theme сортировать по алфавиту =) сои еси чё не так

bul.666
09.02.2008, 23:22
Вот наркоманский пример:

Файл data.txt
1|dsaadsdsa|Бама|sssssas
2|dsaadsфвыdsa|Вывы|sssasdss
3|dsaadsasdasds|Аыы|sssss
4|dsaaddasddsa|Ыы|ssssss
5|dsaadsdsa|Яв|sssdsass
6|dsaaddassdsaб|Уя|sssdsass
Курсивом отметил "темы"...

Файл sort.php

<?php

$osnova = file("data.txt"); //Создаем массив из файла

foreach($osnova as $temp) {
$ss = explode("|",$temp);
$new[] = $ss[2]; //Перебираем массив и создаем новый с "темами"
}
sort($new); //Сортируем массив с "темами"
foreach($new as $str) {
foreach($osnova as $dd) {
$ss = explode("|",$dd);
if ($str == $ss[2]) echo $ss[0]."|".$ss[1]."|<b>".$ss[2]."</b>|".$ss[3]."<br>"; //Если тема из массива тем совпадает с основным массивом то выводим эту строку
}
}
?>


Короче на выходе получилось:
3|dsaadsasdasds|Аыы|sssss
1|dsaadsdsa|Бама|sssssas
2|dsaadsфвыdsa|Вывы|sssasdss
6|dsaaddassdsaб|Уя|sssdsass
4|dsaaddasddsa|Ыы|ssssss
5|dsaadsdsa|Яв|sssdsass

bul.666
09.02.2008, 23:47
Нажми сюда: http://forum.antichat.ru/fusion/buttons/edit.gif (https://forum.antichat.ru/editpost.php?do=editpost&p=588728)

И выбери вверху удалить сообщение

NOmeR1
10.02.2008, 14:54
<?php
function sort_db($db) {
function cmp($a, $b) {
return strcmp($a[3], $b[3]);
}
$new_array = array();
foreach(explode("\n", $db) as $str) {
$new_array[] = explode('|', $str);
}
usort($new_array, "cmp");
$string = '';
foreach($new_array as $array) {
foreach($array as $i => $str) {
$string .= $str;
if($i != (count($array)-1)) {
$string .= '|';
}
}
$string = $string."\n";
}
return $string;
}
?>
Юзай (http://pastebin.x3k.ru/54)