Sven: Geschafft! Der Code lässt sich sicher noch optimieren?

Beitrag lesen

Hallo,

ich habs geschafft - die Funktion tut das, was sie tun soll. Aber das sind seeehr viele Schleifen... ich kopiere mal den Code hier rein, vielleicht mag ihn ja mal jemand überfliegen. Falls das zu verwirrend ist, und niemand Lust hat, sich das anzusehen, kann ich das voll verstehen - ich bin sicher, es geht auch einfacher.

Vielleicht hat ja jemand eine Optimierungsidee?

Lg
Sven

if($_POST['search']) {
  $search_string = strip_tags($_POST['search']);

// Länge des Strings ermitteln, wenn nötig auf 20 Zeichen begrenzen
  $search_len = strlen($search_string);
  if($search_len > 20) { $search_len = 20; }

// Prüfen ob Suchstring zu kurz
  if($search_len < 3) {
    $error[] = $error_tooshort;
  }

// Nur weitermachen, falls keine Fehler vorliegen
  if(count($error) == 0)
  {
    // String in Abschnitte unterteilen und in $search_substr[] speichern
    for($i=0; $i < $search_len; $i++)
    {
      if(strlen(substr($search_string,$i,3)) >= 3)
      {
        $search_substr[] = substr($search_string,$i,3);
      }
    }

// UNION-Abfrage erzeugen
    $sql = "";
    for($i=0; $i<count($search_substr); $i++)
    {
      $sql .= "(SELECT name
          FROM datenbank.test
          WHERE name
          LIKE '%".$search_substr[$i]."%')";
      if($i < count($search_substr)-1) {
        $sql .= " UNION ";
      } else {
        $sql .= " LIMIT 10";
      }
    }

// Abfrage durchführen: Für jeden Eintrag in der
    // Datenbank wird geprüft, welche Teilstrings
    // in den Eintrag hinein passen

$result = mysql_query($sql);
    $num = mysql_num_rows($result);
    if($num > 0)
    {
      while($row = mysql_fetch_array($result))
      {
        $j = 0;
        for($i=0; $i<count($search_substr); $i++)
        {
          if(substr_count($row['name'],$search_substr[$i]) > 0)
          {
            $j++;
          }
        }
        // In diesem zweidimensionalen Array werden
        // gespeichert: Die Anzahl der Treffer und
        // der dazugehörige Datenbank-Eintrag

$search_res[] = array($j,$row['name']);
      }
    } else
    {
      $error[] = $error_noresults;
    }

// Array sortieren
    rsort($search_res);

// Array ausgeben
    for($i=0; $i<count($search_res); $i++)
    {
      for($j=0; $j<count($search_res[$i]); $j++)
      {
        echo $search_res[$i][$j];
      }
    }
  }
}