[php] Tag-Cloud Script

Florian

Angesehenes Mitglied
Hallo,
ich suche ein einfaches PHP-Script mit dem ich Wörter aus einer Datenbank (Mysql) auslesen kann und in unterschiedlichen Schriftgrössen darstellen kann.

MFG
Florian
 
QUOTE (Alain Aubert @ Mo 14.8.2006, 23:29) Was muss Deine Tag Claus können?

Ich habe eine Mysql-Datenbank mit Profildaten (Alter, Wohnort, PLZ, usw.). Nun möchte nun die Top-Zahlen (oder Begriffe) ermitteln der jeweiligen Spalte und geordnet in verschieden Schriftgrösse ausgeben.

MFG
Florian
 
Vielleicht kann ich dir da weiterhelfen...

Ich müsste allerdings ein bisschen mehr über die Bedingungen (wann wird eine Zahl wie groß geschrieben?) wissen.
Wenn du mir bis heute Abend 20 Uhr antwortest kann ich dir vielleicht noch was basteln
smile.gif
 
Ich hab eine Datenbank mit Profildaten (Wohnort, Alter, usw.). Ich möchte nun die Daten aus einer Mysql-Datenbank auslesen. Und den Begriff (Alter) größer darstellen (Schrift von 8px bis 24px) der häufiger in der Datenbank vorkommt. Im Intefekt das gleiche wie auf http://wordpress.com/tags/.

MFG
Florian
 
Du kannst ja die betreffende Spalte auslesen und dann das array mit array_count_values($array) bearbeiten, dann hast du jeweils die Anzahl wie oft eine Variable vorkommt. Danach musst du das ganze nur noch ausgeben und sagen bei welcher Zahl style="font-size: 0px;" wie groß sein soll.
 
So würd ich's auch machen, obwohl mir die Anordnung des Alters bei dir immer noch ein Rätsel ist. Die Ältesten nach oben und am größten oder wie? Kannst du nicht mal ein Datenblatt fertig machen, damit man ungefähr weiß, was du vor hast?!
 
Da brauchst Du wirklich kein Tag Script.
SQL select alter, count(alter) as font-size from tabelle group by alter


CODE $q = query();
$m = fetch();
while ($row = fetchrow())
{
echo "<span style='font-size:".max(8, min(24, $row->font-size))."'>{$row->alter}</span>";
}

Allerding betrachtet diese Lösung Frequenzen ausserhalb des Bereichs als Rand.
Oder 24-8=16 maxF-minF=lengt => 'm:length->16'

SQL select alter, count(alter) as font-size, min(alter) AS min, max(alter) AS max from tabelle group by alter


CODE $q = query();
$m = fetch();
while ($row = fetchrow())
{
$k =16/($row['max']-$row['min']);
echo "<span style='font-size:".round($row->font-size*$k)."'>{$row->alter}</span>";
}


PS Das Feld font-size darf natürlich kein - enthalten!
 
@Alain Aubert :
Irgendwie funktioniert deine Lösung nicht.
Ich suche ein Script womit ich eine Cloud-Tag-Wolke erstellen kann.

MFG
Florian
 
QUOTE Irgendwie funktioniert deine Lösung nicht.

Irgendwie funktioniert mein Verständnis Deiner Fehlermeldung nicht.

Hast Du das post scriptum beachtet?
Hast Du das Konzept verstanden? (sql group by)
 
QUOTE (Alain Aubert @ Mi 27.9.2006, 18:04) Wäre aber schon toll, wenn Du Deine funktionierende Variante auch posten würdest.

Stimmt.


CODE $abfrage = "SELECT interessen, interessen2, interessen3 FROM tabelle";
$result = mysql_query($abfrage);
while ($row = mysql_fetch_array ($result))
{
$data[] = $row['interessen']."\n".$row['interessen2']."\n".$row['interessen3'];
}

$data = implode('',$data);
 
// Woerter splitten
$words = preg_split("/\n/", $data);
$acv = array_count_values( $words );
 
// Nicht erwuenschte Woerter loeschen
$bannedwords = array('');
$i = 0;
foreach($acv as $k=>$v) {
if (!array_search(strtolower($k),$bannedwords) and eregi("[a-zA-Z]",$k) and $i<=40 and strlen($k)>2) {
 if (isset($new_acv[strtolower($k)] ))
 $new_acv[strtolower($k)] += $v;
 else
 $new_acv[strtolower($k)] = $v;
 $i++;
}
}
 
// Alphabetisch sortieren
ksort( $new_acv );

// Clouds erstellen
foreach( $new_acv as $k=>$v) {
$size = $v*1;
$weight = $v*4;
 
if ($size > 4) $size = 4;
if ($weight > 50) $weight = 50;

$kurl = urlencode("$k");
echo "<a href=\"suche.php?q=$kurl\" style=\"font-size: {$size}em; font-weight: {$weight}\">$k</a>  \n";
}


MFG
Florian
 
Das ist ja ein cooles Script.

Gibts das auch für Bilder?

Wo dann mit GD-Lib ein Bild erstellt wird, je nach Klick-Popularität oder so die Grösse der einzelnen Bildern anpasst und so eine Collage als Bild erstellt...
 
QUOTE (J Janser @ Mi 27.9.2006, 18:11) Gibts das auch für Bilder?

Das ist auf jedenfall eine coole Idee, beliebte Bilder größer anzeigen, da wäre Flash vermutlich besser als wenn man jedesmal die Bilder on the Fly mit php größer oder kleiner macht.
 
Hi,

kann mir bitte jemand sagen, wie die datenbankabfrage auszusehen hat? muss da was gecountet werden?
 
Die 1 Zeile ist die Abfrage:
CODE $abfrage = "SELECT interessen, interessen2, interessen3 FROM tabelle";
$result = mysql_query($abfrage);
while ($row = mysql_fetch_array ($result))
{
$data[] = $row['interessen']."\n".$row['interessen2']."\n".$row['interessen3'];
}

$data = implode('',$data);

// Woerter splitten
$words = preg_split("/\n/", $data);
$acv = array_count_values( $words );

// Nicht erwuenschte Woerter loeschen
$bannedwords = array('');
$i = 0;
foreach($acv as $k=>$v) {
if (!array_search(strtolower($k),$bannedwords) and eregi("[a-zA-Z]",$k) and $i<=40 and strlen($k)>2) {
if (isset($new_acv[strtolower($k)] ))
$new_acv[strtolower($k)] += $v;
else
$new_acv[strtolower($k)] = $v;
$i++;
}
}

// Alphabetisch sortieren
ksort( $new_acv );

// Clouds erstellen
foreach( $new_acv as $k=>$v) {
$size = $v*1;
$weight = $v*4;
 
if ($size > 4) $size = 4;
if ($weight > 50) $weight = 50;

$kurl = urlencode("$k");
echo "<a href=\"suche.php?q=$kurl\" style=\"font-size: {$size}em; font-weight: {$weight}\">$k</a>  \n";
}


Du musst die Felder interessen, interessen2, interessen3 in der Zeile 5 auch noch anpassen.
Man muss nichts counten. Das macht das Script. Du musst natürlich auch noch eine Datenbank-Verbindung herstellen.

MFG
Florian
 
Die Daten dürfen keine Absätze enthalten. Liest du die Daten aus eine Mysql-DB aus?

MFG
Florian
 
Zurück
Oben