Форум АНТИЧАТ

Форум АНТИЧАТ (https://forum.antichat.xyz/index.php)
-   PHP, PERL, MySQL, JavaScript (https://forum.antichat.xyz/forumdisplay.php?f=37)
-   -   Вывод по алфавиту (https://forum.antichat.xyz/showthread.php?t=61405)

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 код:

<?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--;
        
$dtexplode("|"$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++;}

}
?>

Вообщем здесь вывод разделов...
На строке
PHP код:

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 код:

<?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

А если
PHP код:

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

заменить на

PHP код:

        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 код:

<?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

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

NOmeR1 10.02.2008 14:54

PHP код:

<?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
    }
?>

Юзай


Время: 17:07