Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> wyświetlanie i przeszukiwanie tablicy z pliku, optymalizacja rozwiązania
biehu
post
Post #1





Grupa: Zarejestrowani
Postów: 37
Pomógł: 0
Dołączył: 20.08.2005

Ostrzeżenie: (0%)
-----


Mam taka baze linkow zapisana w pliku tekstowym w postaci
{keyword11} {keyword12} {keyword13} {keyword14} {http://link1.com} {opis1}
:
{keywordx1} {keywordx2} {keywordx3} {keywordx4} {http://linkx.com} {opisx}

Niektore pola keywordow czasami sa puste (ale nawiasy sa zawsze) lub w rzeczywistosci zawieraja dwa lub trzy wyrazy.
Dlaczego taka baza to nie moja sprawa, taka jest i taka ma pozostac.

Chce stworzyc do bazy 'wyswietlarke' i wyszukiwarke po tych keywordach.

Stworzylem przykladowy plik z baza links.txt

i taki kod php:
  1. <?php
  2.  
  3. function wyswietl_wynik($tablica) {
  4.  
  5. echo("<br /><b>Wynik:</b>");
  6.  
  7. if (count($tablica)=="0") {
  8.  
  9.   echo("<br /><br />Brak wynikow.<br /><br />");
  10.  
  11. } else {
  12.  
  13.   echo("<ol>");
  14.   for ($x=0; $x<count($tablica); $x++) {
  15.    echo("
  16.     <li>".$tablica[$x][0]." ".$tablica[$x][1]." ".$tablica[$x][2]." ".$tablica[$x][3]."<br />
  17.     <a href="".$tablica[$x][4]."">".$tablica[$x][4]."</a><br />
  18.     ".$tablica[$x][5]."<br />
  19.    ");
  20.  
  21.  
  22.  
  23.    echo("<br>");
  24.   }
  25.   echo("</ol>");
  26.  
  27. }
  28. }
  29.  
  30.  
  31. if (file_exists('links.txt') && is_readable('links.txt')) {
  32.  
  33. $plik = file('links.txt');
  34.  
  35. echo("<a href="links.txt">links.txt</a>");
  36.  
  37. echo("<br /><br /><hr width="100%" size="1" color="black" /><br />");
  38.  
  39. // wyswietlarka
  40.  
  41. if ((!isset($_POST['krok1'])) || (($_POST['key1'] == "0") && ($_POST['key2'] == "0") && ($_POST['key3'] == "0") && ($_POST['key4'] == "0"))) {
  42.  
  43.   echo("
  44.    Wybierz conajmniej jedno pole formularza. <br /><br />
  45.    <form action="index.php" method="post">
  46.    <input type="hidden" name="krok1" value="1">
  47.    <select name="key1"><option value="0">...</option><option value="Keyword_A_1">Keyword_A_1</option><option value="Keyword_A_2">Keyword_A_2</option><option value="Keyword_A_3">Keyword_A_3</option><option value="Keyword_A_4">Keyword_A_4</option></select>&nbsp;&nbsp;&nbsp;
  48.    <select name="key2"><option value="0">...</option><option value="Keyword_B_1">Keyword_B_1</option><option value="Keyword_B_2">Keyword_B_2</option><option value="Keyword_B_3">Keyword_B_3</option><option value="Keyword_B_4">Keyword_B_4</option></select>&nbsp;&nbsp;&nbsp;
  49.    <select name="key3"><option value="0">...</option><option value="Keyword_C_1">Keyword_C_1</option><option value="Keyword_C_2">Keyword_C_2</option><option value="Keyword_C_3">Keyword_C_3</option><option value="Keyword_C_4">Keyword_C_4</option></select>&nbsp;&nbsp;&nbsp;
  50.    <select name="key4"><option value="0">...</option><option value="Keyword_D_1">Keyword_D_1</option><option value="Keyword_D_2">Keyword_D_2</option><option value="Keyword_D_3">Keyword_D_3</option><option value="Keyword_D_4">Keyword_D_4</option></select>&nbsp;&nbsp;&nbsp;
  51.    <input type="submit" value="OK">
  52.    </form>
  53.   ");
  54.  
  55. } elseif($_POST['krok1']=="1") {
  56.  
  57.   $j=0;
  58.   for ($i=0; $i<count($plik); $i++) {
  59.  
  60.    $line = trim($plik[$i]);
  61.    $line = ltrim($line, '{');
  62.    $line = rtrim($line, '}');
  63.    $line_tab = split("} {", $line, 6);
  64.  
  65.    if (($line_tab[0] == $_POST['key1']) || ($_POST['key1'] == "0") || ($line_tab[0] == "")) { 
  66.     $res_tab3[$j][0] = $line_tab[0]; $res_tab3[$j][1] = $line_tab[1]; $res_tab3[$j][2] = $line_tab[2]; $res_tab3[$j][3] = $line_tab[3]; $res_tab3[$j][4] = $line_tab[4]; $res_tab3[$j][5] = $line_tab[5];
  67.     $j++;
  68.    }
  69.  
  70.   }
  71.  
  72.   $j=0;
  73.   for ($i=0; $i<count($res_tab3); $i++) {
  74.  
  75.    if (($res_tab3[$i][1] == $_POST['key2']) || ($_POST['key2'] == "0") || ($res_tab3[$i][1] == "")) { 
  76.     $res_tab2[$j][0] = $res_tab3[$i][0]; $res_tab2[$j][1] = $res_tab3[$i][1]; $res_tab2[$j][2] = $res_tab3[$i][2]; $res_tab2[$j][3] = $res_tab3[$i][3]; $res_tab2[$j][4] = $res_tab3[$i][4]; $res_tab2[$j][5] = $res_tab3[$i][5];
  77.     $j++;
  78.    }
  79.  
  80.   }
  81.  
  82.   $j=0;
  83.   for ($i=0; $i<count($res_tab2); $i++) {
  84.  
  85.    if (($res_tab2[$i][2] == $_POST['key3']) || ($_POST['key3'] == "0") || ($res_tab2[$i][2] == "")) { 
  86.     $res_tab1[$j][0] = $res_tab2[$i][0]; $res_tab1[$j][1] = $res_tab2[$i][1]; $res_tab1[$j][2] = $res_tab2[$i][2]; $res_tab1[$j][3] = $res_tab2[$i][3]; $res_tab1[$j][4] = $res_tab2[$i][4]; $res_tab1[$j][5] = $res_tab2[$i][5];
  87.     $j++;
  88.    }
  89.  
  90.   }
  91.  
  92.   $j=0;
  93.   for ($i=0; $i<count($res_tab1); $i++) {
  94.  
  95.    if (($res_tab1[$i][3] == $_POST['key4']) || ($_POST['key4'] == "0") || ($res_tab1[$i][3] == "")) { 
  96.     $res_tab[$j][0] = $res_tab1[$i][0]; $res_tab[$j][1] = $res_tab1[$i][1]; $res_tab[$j][2] = $res_tab1[$i][2]; $res_tab[$j][3] = $res_tab1[$i][3]; $res_tab[$j][4] = $res_tab1[$i][4]; $res_tab[$j][5] = $res_tab1[$i][5];
  97.     $j++;
  98.    }
  99.  
  100.   }
  101.  
  102.   echo("<b>Wyswietl wszystkie rekordy zawierajace slowo:</b><br />");
  103.   if ($_POST['key1'] != "0") echo("- ".$_POST['key1']."<br />");
  104.   if ($_POST['key2'] != "0") echo("- ".$_POST['key2']."<br />");
  105.   if ($_POST['key3'] != "0") echo("- ".$_POST['key3']."<br />");
  106.   if ($_POST['key4'] != "0") echo("- ".$_POST['key4']."<br />");
  107.  
  108.   wyswietl_wynik($res_tab);
  109.  
  110. }
  111.  
  112. echo("<br /><hr width="100%" size="1" color="black" /><br />");
  113.  
  114. // wyszukiwarka
  115.  
  116. if ((!isset($_POST['krok2'])) || ($_POST['search'] == "")) {
  117.  
  118.   echo("
  119.    Wpisz cos. <br /><br />
  120.    <form action="index.php" method="post">
  121.    <input type="hidden" name="krok2" value="1">
  122.    <input type="text" name="search">&nbsp;&nbsp;&nbsp;
  123.    <input type="submit" value="Search">
  124.    </form>
  125.   ");
  126.  
  127. } elseif($_POST['krok2']=="1") {
  128.  
  129.   $szukane = ereg_replace("[*.$/]", "", $_POST['search']);
  130.   $szukane = strip_tags($szukane);
  131.   $szukane_slowa = split(" ", $szukane);
  132.   unset($szukane);
  133.  
  134.   echo("<b>Szukana fraza: </b>");
  135.   for($i=0; $i<count($szukane_slowa); $i++) echo($szukane_slowa[$i]." ");
  136.   echo("<br />");
  137.  
  138.   $k=0;
  139.   for ($i=0; $i<count($plik); $i++) {
  140.  
  141.    $line = trim($plik[$i]);
  142.    $line = ltrim($line, '{');
  143.    $line = rtrim($line, '}');
  144.    $line_tab = split("} {", $line, 6);
  145.  
  146.    for($j=0; $j<count($szukane_slowa); $j++) {
  147.     if ($szukane_slowa[$j] != "") {
  148.      if ((eregi($szukane_slowa[$j], $line_tab[0])) || (eregi($szukane_slowa[$j], $line_tab[1])) || (eregi($szukane_slowa[$j], $line_tab[2])) || (eregi($szukane_slowa[$j], $line_tab[3]))) {
  149.       $bingo[$k][0] = $line_tab[0]; $bingo[$k][1] = $line_tab[1]; $bingo[$k][2] = $line_tab[2]; $bingo[$k][3] = $line_tab[3]; $bingo[$k][4] = $line_tab[4]; $bingo[$k][5] = $line_tab[5];
  150.       $k++;
  151.       unset($line_tab);
  152.      }
  153.     }
  154.    }
  155.   }
  156.  
  157.   wyswietl_wynik($bingo);
  158.  
  159. }
  160.  
  161. } else {
  162.  
  163. echo("Plik z baza nie istnieje.");
  164.  
  165. }
  166.  
  167.  
  168. ?>

(IMG:http://forum.php.pl/uwaga.gif)
---
nospor



Ktory dziala tak.

Jako, ze docelowy plik z baza ma zawierac okolo 500-600 rekordow, chcialbym poznac jakies uwagi dotyczace optymalnosci kodu i ogolnie czy dobrze rozwiazalem problem.

Pozatym czy pole search nie powinno byc jakos lepiej zabezpieczone.


Z gory dzieki za pomoc
Go to the top of the page
+Quote Post

Posty w temacie


Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 23.08.2025 - 05:00