php.de

Zurück   php.de > Webentwicklung > PHP Einsteiger > PHP Tipps 2007

 
 
LinkBack Themen-Optionen Thema bewerten
Alt 16.05.2007, 06:13  
pHleX
Gast
 
Beiträge: n/a
Standard Nach Anfangsbuchstabe sortieren

Der Titel ist vllt etwas schlecht gewählt aber ich veruschs einfach mal zu erklären:

Also ich hab ne Datenbank in der ne Tabelle ist mit folgenden Informationen:
Interpret, Album, Trackanzahl

Jetzt will ich das ganze in verschiedenen Tabellen ausgeben. Und zwar für jeden Anfangsbuchstaben der Interpreten eine eigene Tabelle.

Beispiel:
Zitat:
A
Interpet mit A | Album | Trackanzahl
Interpet mit A | Album | Trackanzahl
Interpet mit A | Album | Trackanzahl

B
Interpet mit B | Album | Trackanzahl
Interpet mit B | Album | Trackanzahl
Interpet mit B | Album | Trackanzahl

usw....
Nur wie mache ich das?
Bisher frage ich für jeden Buchstaben die Datenbank neu ab.
Das ist etwas nervig und bestimmt auch "verschwendeter" code...

Gibt mir jemand einen Tipp?
 
Sponsor Mitteilung
PHP Code Flüsterer

Registriert seit: 21.08.2005
Beiträge: 4682
PHP-Kenntnisse:
Fortgeschritten

Alt 16.05.2007, 12:59  
Erfahrener Benutzer
 
Registriert seit: 21.05.2008
Beiträge: 9.937
Zergling-new wird schon bald berühmt werden
Standard

Willkommen im Forum

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 `interpret`, `album`, `trackanzahl` FROM `alben` ORDER BY `interpret` ASC";
$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(027, 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['interpret']);
    
// und den $data Array dahingehend füllen
    
$data[$initial][] = $line;
}
// Den Array durchlaufen
foreach ($data as $initial => $group) {
    
// Den Anfangsbuchstaben ausgeben
    
printf('<hr />%s
'
$initial);
    for (
$i 0$x count($group); $i $x; ++$i) {
        
// Und natürlich noch die aus der Datenbank zugeordneten Gruppen
        
printf('%u: %s
'
$i 1implode(', '$group[$i]));
    }
}
// Fertig
?>
PS: Bitte Forenregeln lesen
Zergling-new ist offline  
Alt 17.05.2007, 02:34  
pHleX
Gast
 
Beiträge: n/a
Standard

genial. danke
ich hab jetzt mal versucht, die #'s vor dem rest anzuzeigen, indem ich die zeilen
PHP-Code:
$keys range('A''Z');
$keys[] = '#'// Raute für unbekannte Zeichen 
vertausche. geht auch prima. hat außerdem den (für mich positiven) nebeneffekt, dass leere kategorien wegfallen - nur warum?
und warum bekomm ich jetzt die fehlermeldung
Zitat:
"Warning: array_combine() [function.array-combine]: Both parameters should have an equal number of elements in /***/test.php on line 51
wie kann ich das ohne fehlermeldung lösen?
und vielleicht auch anders die leeren tabellen wegfallen lassen?
 
Alt 17.05.2007, 02:43  
Erfahrener Benutzer
 
Registriert seit: 21.05.2008
Beiträge: 9.937
Zergling-new wird schon bald berühmt werden
Standard

Zitat:
Zitat von pHleX
genial. danke
ich hab jetzt mal versucht, die #'s vor dem rest anzuzeigen, indem ich die zeilen
PHP-Code:
$keys range('A''Z');
$keys[] = '#'// Raute für unbekannte Zeichen 
vertausche. geht auch prima.
Das wundert mich sehr. Bitte versuche das Skript zu verstehen, nicht einfach nur durcheinander zuwürfeln.
Zergling-new ist offline  
Alt 17.05.2007, 16:28  
pHleX
Gast
 
Beiträge: n/a
Standard

ich hab jetzt stundenlang gegrübelt, ausprobiert und rumgebastelt....
komme zu keinem vernünftigen ergebnis.
ne idee wies mit mir weitergeht?
 
Alt 17.05.2007, 18:35  
Erfahrener Benutzer
 
Registriert seit: 21.05.2008
Beiträge: 9.937
Zergling-new wird schon bald berühmt werden
Standard

Du weißt $keys mittels range() die Buchstaben A-Z zu und fügst dann die # mittels [] Operator hinzu.

Einfach vertauschen geht nicht, sonst überschreibt ja die Zuweisung von range() wieder alles, womit sich auch erklären würde, warum array_combine() fehlschlägt (# wurde ja überschrieben).

PHP-Code:
<?php
$keys 
= array('#');
$keys array_merge($keysrange('A''Z'));
?>
Das sollte funktionieren. Du musst array_merge() nicht kennen, aber was den Fehler verursacht sollte doch erschließbar sein (einfach mal Debuggen).
Zergling-new ist offline  
Alt 18.05.2007, 16:51  
pHleX
Gast
 
Beiträge: n/a
Standard

jetz hab ichs verstanden
dankeschön
 
Alt 23.05.2007, 01:05  
pHleX
Gast
 
Beiträge: n/a
Standard

so hab das inzwischen soweit erweitert und verändert, dass es genau das tut, was ich will
wie kann ich denn nur die tabellen anzeigen lassen, die überhaupt mindestens eine reihe enthalten?

wenn ich das noch hinkrieg, bin ich glücklich
 
Alt 23.05.2007, 10:33  
Erfahrener Benutzer
 
Registriert seit: 21.05.2008
Beiträge: 9.937
Zergling-new wird schon bald berühmt werden
Standard

Dann hast du es ja offenbar immernoch nicht verstanden

Prinzip: Erstelle ein Array-Grundgerüst mit allen Elementen, aber ohne Inhalt, fülle sie.
Und was könnte man in diesem Konstrukt nun verändern, um nur die Reihen mit Inhalt gefüllt zu sehen? Richtig - das Grundgerüst nicht erstellen, zumindest erst zur Füllzeit!
Zergling-new ist offline  
 


Themen-Optionen
Thema bewerten
Thema bewerten:

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an
Gehe zu

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Array sortieren mit regex Lupi PHP Tipps 2008 3 21.07.2008 15:17
Dateien sortieren Lavalampe PHP Tipps 2008 10 02.05.2008 15:47
Problem mit sortieren Cirrha PHP Tipps 2008 11 19.01.2008 23:05
Daten aus XML sortieren GSJLink HTML, Usability und Barrierefreiheit 13 09.12.2007 18:24
solved: Sortieren von Dateiname A Hoppe PHP-Fortgeschrittene 3 14.11.2006 08:04
DECIMAL lässt sich nicht mit ORDER BY sortieren buggybugga Datenbanken 4 07.07.2006 15:43
[Erledigt] ftp_nlist sortieren PHP-Fortgeschrittene 1 19.02.2006 17:34
Sortieren mit buchstabe und zahl Unkaputtbar2 Datenbanken 3 17.02.2006 11:49
Sortieren "ORDER BY" ?? Cyrus Datenbanken 11 30.10.2005 11:12
Problem beim Sortieren PHP Tipps 2005-2 5 29.06.2005 07:00
multidim Array nach Inhalt und Key sortieren PHP Tipps 2005 1 20.05.2005 16:22
2 Array in Abhänigkeit sortieren? PHP Tipps 2005 4 10.02.2005 20:31
Sortieren einer Tabelle woods Datenbanken 4 02.12.2004 20:02
Inhalt einer datei Sortieren ???? PHP Tipps 2004 12 21.06.2004 22:56
Sortieren nach Timestamp Datenbanken 5 01.06.2004 16:04

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
tabelle nach anfangsbuchstaben sortieren, array sotieren nach anfangsbuchstaben, php \both parameters should have an equal number of elements\, wie nach anfangsbuchstaben sortieren, // funktion die uns den anfangsbuchstaben eines strings liefert, tabellen nach anfangsbuchstabe ordnen, array nach anfangsbuchstaben sortieren, php arrays nach anfangsbuchstaben sortieren, php sortierung nach anfangsbuchstabe ohne tabelle, interpreten aus verschiedenen tabellen ausgeben, php liste nach anfangsbuchstabe sortieren, php nach anfangsbuchstabe ordnen array, array sortieren nach anfangsbuchstabe, nach anfangsbuchstabe sortieren, php eingabe nach anfangsbuchstaben sortieren, php liste nach anfangsbuchstaben sortiert, warning: array_combine() [function.array-combine]: both parameters should have an equal number of elements i, array sortieren nach anfangsbuchstabe eines elements, warning: array_combine() [function.array-combine]: both parameters should have an equal number of elements in, php array [#key] raute zeichen vor key

Alle Zeitangaben in WEZ +2. Es ist jetzt 16:29 Uhr.




Powered by vBulletin® Version 3.7.2 (Deutsch)
Copyright ©2000 - 2012, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0
Aprilia-Forum, Aquaristik-Forum, Liebeskummer-Forum, Zierfisch-Forum, Geizkragen-Forum

Creative Commons License
Dieser Inhalt ist unter einer Creative Commons-Lizenz lizenziert.