Mit Formularabfrage Datenbank durchsuchen und Ergebnis ausgeben.

Das ist jetzt der Punkt, wo man sich mit Normalisierung auseinandersetzen sollte.

@koli.bri: funktioniert, macht aber Probleme, wenn du Schlagwörter mit Zeichen hast, die für den Key nicht geeignet sind.

Alternativ (Versuchsaufbau ohne DB, aber keyword kann genausogut aus einer MySQL-Abfrage stammen):
PHP:
<?php
$keyword[] = "test,kaffee,banane,sonstwas";
$keyword[] = "test,birne";
$keyword[] = "test,apfel,sonstwas";

$keywords = array();

for($i=0;$i<sizeof($keyword);$i++) {
	$k = explode(",", $keyword[$i]);
	$keywords = array_merge($keywords, $k);
}

echo "Alle Werte:\r\n";
print_r($keywords);

$keywords = array_unique($keywords);
	
echo "Eindeutige Werte:\r\n";
print_r($keywords);

sort($keywords);

echo "Sortierte Werte:\r\n";
print_r($keywords);
?>

erzeugt folgende Ausgabe:
Code:
Alle Werte:
Array
(
    [0] => test
    [1] => kaffee
    [2] => banane
    [3] => sonstwas
    [4] => test
    [5] => birne
    [6] => test
    [7] => apfel
    [8] => sonstwas
)
Eindeutige Werte:
Array
(
    [0] => test
    [1] => kaffee
    [2] => banane
    [3] => sonstwas
    [5] => birne
    [7] => apfel
)
Sortierte Werte:
Array
(
    [0] => apfel
    [1] => banane
    [2] => birne
    [3] => kaffee
    [4] => sonstwas
    [5] => test
)
 
Normalisierung - das war das Wort was mein Kumpel mir auch an den Kopf geworfen hat. :D

Aber deine Idee scheint ja sehr gut zu sein! Ich werd zwar wieder Tage brauchen um die Datenbank da zu integrieren, gebe mir aber größte Mühe!
 
Ist jetzt nicht so der Akt. Du ersetzt einfach die if-Schleife durch deine while-Schleife, welche die DB-Ergebnisse liefert:
PHP:
<?php 
// Connect zur Datenbank wird als gegeben angenommen.

$keywords = array();
$query = "SELECT distinct schlagworte FROM kataloge"; 
$res = mysql_query($query);
while ($row = mysql_fetch_array($res)) {
	$k = explode(",", $row['schlagworte']);
	$keywords = array_merge($keywords, $k);
}

echo "Alle Werte:\r\n";
print_r($keywords);

$keywords = array_unique($keywords);
	
echo "Eindeutige Werte:\r\n";
print_r($keywords);

sort($keywords);

echo "Sortierte Werte:\r\n";
print_r($keywords);
?>

Der distinct liefert dir schon mal nur eindeutige MySQL-Werte zurück, wobei das bei dir eher uninteressant sein dürfte, wenn du da wirklich kommasepariert wild gewürfelte Werte drin hast.
 
Das ist ja interessant:

er macht das schon zu 95% genauso wie gewünscht. 182 Begriffe hat er gefunden, davon sind bis zur laufenden Zahl 168 alle richtig sortiert (Zylinder in meinem Fall). Doch 169 ist dann plötzlich "flexible Stromwandler", 172 "Blitzschutz". Also total unsortiert. Wie kann so ein Phänomen entstehen?
 
Hm... Vielleicht haben sich da Leerzeichen eingeschlichen...

Gib die Werte mal mit einem Zeichen davor und danach aus, vielleicht kommt man dem So auf die Spur :augen:
 
Aaaah, Leerzeichen. Das ist ein gutes Stichwort. Ja, könnte ein Grund sein - "flexible Stromwandler" sind ja zwei Worte. Allerdings ist "Blitzschutz" nur eins. Ich werd der Sache auf den Grund gehen.

P.S. Kann man eigentlich auch dafür sorgen, dass die Begriffe nicht hintereinander, sondern untereinander oder gar in Spalten ausgegeben werden?
 
Aaaah, Leerzeichen. Das ist ein gutes Stichwort. Ja, könnte ein Grund sein - "flexible Stromwandler" sind ja zwei Worte. Allerdings ist "Blitzschutz" nur eins. Ich werd der Sache auf den Grund gehen.

P.S. Kann man eigentlich auch dafür sorgen, dass die Begriffe nicht hintereinander, sondern untereinander oder gar in Spalten ausgegeben werden?

Ich bin sicher, dass man sie sogar im Kreis ausgeben kann :D
Du brauchst ja im Grunde nur die HTML-Ausgabe verändern. Für eine neue Zeile kommt ein "<br>" Hinter jeden Begriff, bei Spalten müsste ich jetzt mal nachgucken. Mit einer Tabelle geht es auf jeden Fall, auch wenn da ein wenig getrickst werden müsste.

Ich würde die Ausgabeliste übrigens als HTML-Liste ausgeben, schließlich ist es ja eine :D
 
Ich würde auch zu einer Liste raten. Die kannst du dann ja mit CSS so formatieren, dass das ganz untereinander, nebeneinander oder wie auch immer steht.

Wegen der Sortierung: Leerzeichen ist ein gutes Stichwort, Groß-/Kleinschreibung könnte ein weiterer Grund sein. Ich würde neben dem vorangestellten Zeichen auch noch ein <pre> vorher machen, da sieht man das Leerzeichen dann auch besser. Oder lass dir doch mal das sortierte Array mit print_r() ausgeben.
 
Das Problem an der Liste ist aber doch, dass ich nur einen Begriff ausgeben lasse, so im Endeffekt. Ich lese ja nur ein Array aus. Insofern habe ich ja nicht die Möglichkeit mit

echo a;</br>
echo b;</br>

usw. eine Liste zu erstellen. Ich hab ja nur die Ausgabe

echo "<p><b>Schlagworte sortiert:</b></p>\r\n";
print_r($keywords);

Wo soll ich da etwas unterteilen können?

P.S. @msslovi0: wie du siehst gebe ich ja mit print_r() aus. Aber den Fehler find ich hoffentlich noch.
 
Mit print_r() solltest du nur zu Debugging-Zwecken ausgeben, das 'Array' steht dir ja sonst auch immer im Text.

Um aus deiner Liste auch was vernünftiges in HTML zu machen, versuch mal folgendes:
HTML:
<ul>
<?php
foreach($keywords as $keyword) {
?>
<li><?=$keyword;?></li>
<?php } ?>
</ul>

Hast du das mit der Sortierung im Griff?
Ansonsten hilft hier der Trick:

HTML:
<ul>
<?php
foreach($keywords as $keyword) {
?>
<li>***<?=$keyword;?>***</li>
<?php } ?>
</ul>

um Leerzeichen zu finden, Ausgabe am besten im Quelltext ansehen, da sieht man dank Festbreitenschrift dann auch die Leerzeichen.
 
Zurück
Oben Unten