Hey,
ich habe vorhin gegoogelt und bin dabei auf diesen Beitrag gestoßen. Da der Beitrag von 2008 stammt dachte ich frage ich lieber in einem neuen Beitrag.
Ich habe den Code von dort genommen und mich damit auseinander gesetzt,
ich möchte Fragen aus einer FAQ damit ordnen.
Ich habe den Code so:
Um den Code besser zu verstehen habe ich immer verschiedene Teile des Codes mit der Kommentar Funktion "abgeschaltet" und mir den Stand der Verarbeitung ausgegeben.
Allerdings habe ich jetzt das Problem, dass die Fragen ohne Zeilen Umbruch wiedergegeben werden. Deshalb muss ich hier:
echo implode(', ', $group[$i]);
ja irgendwie noch </ br> einfügen, allerdings weiß ich nicht wie.
Der gesammte Code oben ist in einer Datei, später möchte ich es in eine andere Datei einfügen in der die Abfrage eben auch answer enthält (so wie oben) jedoch soll nur die Antwort und nicht question+answer ausgegeben werden. Wie kann ich das machen?
Außerdem wollte ich # vor A-Z haben allerdings habe ich das auch nicht hinbekommen.
Vielen Dank schonmal für eure Hilfe.
ich habe vorhin gegoogelt und bin dabei auf diesen Beitrag gestoßen. Da der Beitrag von 2008 stammt dachte ich frage ich lieber in einem neuen Beitrag.
Ich habe den Code von dort genommen und mich damit auseinander gesetzt,
ich möchte Fragen aus einer FAQ damit ordnen.
Ich habe den Code so:
PHP-Code:
<?php
mysql_connect('localhost', '***', '***');
mysql_select_db('****');
// array_combine existiert erst seit PHP 5
if (!function_exists('array_combine')) {
function array_combine($keys, $values)
{
// nicht ganz die selbe Funktionalität
$combined = array();
for ($i = 0, $x = min(count($keys), count($values)); $i < $x; ++$i) {
$combined[$keys[$i]] = $values[$i];
}
// aber ausreichend
return $combined;
}
}
// Funktion die uns den Anfangsbuchstaben eines Strings liefert
// mit der Besonderheit Umlaute auf das 26-Buchstaben-Alphabet umzulegen (leider manuell)
function getInitial($string)
{
$initial = $string{0};
if (preg_match('/^[a-z]$/i', $initial)) {
return strtoupper($initial);
}
switch ($initial) {
case 'ä': case 'Ä':
return 'A';
case 'ö': case 'Ö':
return 'O';
case 'ü': case 'Ü':
return 'U';
default:
// Anfangsbuchstabe ein anderes Zeichen? Dann Raute als Default
return '#';
}
}
// Query zur Abfrage
$sql = "SELECT `question`, `answer` FROM `faq_question`";
$res = mysql_query($sql) or die(mysql_error());
// Schlüssel zwischen A-Z erstellen
$keys = range('A', 'Z');
$keys[] = '#'; // Raute für unbekannte Zeichen
// Die Werte sollen leere Arrays sein
$values = array_fill(0, 27, array());
// Das ganz kombinieren und wir erhalten unsere leere $data-Maske, deren Schlüssel das Alphabet
// und die Raute und deren Werte leere Arrays sind
$data = array_combine($keys, $values);
while ($line = mysql_fetch_assoc($res)) {
// Anfangsbuchstaben ermitteln
$initial = getInitial($line['question']);
// und den $data Array dahingehend füllen
$data[$initial][] = $line;
}
// Den Array durchlaufen
foreach ($data as $initial => $group) {
// Den Anfangsbuchstaben ausgeben
echo "$initial <hr /><br />";
for ($i = 0, $x = count($group); $i < $x; ++$i) {
// Und natürlich noch die aus der Datenbank zugeordneten Gruppen
echo implode(', ', $group[$i]);
}
}
// Fertig
?>
Allerdings habe ich jetzt das Problem, dass die Fragen ohne Zeilen Umbruch wiedergegeben werden. Deshalb muss ich hier:
echo implode(', ', $group[$i]);
ja irgendwie noch </ br> einfügen, allerdings weiß ich nicht wie.
Der gesammte Code oben ist in einer Datei, später möchte ich es in eine andere Datei einfügen in der die Abfrage eben auch answer enthält (so wie oben) jedoch soll nur die Antwort und nicht question+answer ausgegeben werden. Wie kann ich das machen?
Außerdem wollte ich # vor A-Z haben allerdings habe ich das auch nicht hinbekommen.
Vielen Dank schonmal für eure Hilfe.
Kommentar