SELFPHP: Version 5.8.2 Befehlsreferenz - Tutorial – Kochbuch – Forum für PHP Einsteiger und professionelle Entwickler

SELFPHP


Professional CronJob-Service

Suche



CronJob-Service    
bei SELFPHP mit ...



 + minütlichen Aufrufen
 + eigenem Crontab Eintrag
 + unbegrenzten CronJobs
 + Statistiken
 + Beispielaufrufen
 + Control-Bereich

Führen Sie mit den CronJobs von SELFPHP zeitgesteuert Programme auf Ihrem Server aus. Weitere Infos



:: Buchempfehlung ::

Fortgeschrittene CSS-Techniken

Fortgeschrittene CSS-Techniken zur Buchempfehlung
 

:: Anbieterverzeichnis ::

Globale Branchen

Informieren Sie sich über ausgewählte Unternehmen im Anbieterverzeichnis von SELFPHP  

 

:: Newsletter ::

Abonnieren Sie hier den kostenlosen SELFPHP Newsletter!

Vorname: 
Name:
E-Mail:
 
 

Zurück   PHP Forum > SELFPHP > PHP für Fortgeschrittene und Experten
Hilfe Community Kalender Heutige Beiträge Suchen

PHP für Fortgeschrittene und Experten Fortgeschrittene und Experten können hier über ihre Probleme und Bedenken talken

Antwort
 
Themen-Optionen Ansicht
  #1  
Alt 07.07.2002, 04:51:29
Benutzerbild von |Coding
|Coding |Coding ist offline
Administrator
 
Registriert seit: Apr 2002
Ort: Bergheim
Alter: 41
Beiträge: 5.255
|Coding eine Nachricht über Skype™ schicken
assoziatives array auf-/ab- steigend sortieren

hi,

ich möchte den key eines assoziativen arrays in auf- bzw. ab- steigender reihenfolge sortieren. die zuordnung von key zu value muss beibehalten werden. bei doppelten array-keys sollen nach array-value weiter sortiert werden.

bsp.:

$array1('a' => '10', 'c' => '100', 'b' => '10', 'e' => '0', 'd' => '1');
$array2('10' => 'a', '100' => 'c', '10' => 'b', '0' => 'e', '1' => 'd');


$array1 soll so nach array-key sortiert werden:

aufsteigend:

e0
d1
c100
b10
a10


absteigend:

a10
b10
c100
d1
e0



$array1 soll so nach array-key sortiert werden:

aufsteigend:

100c
10b
10a
1d
0e


absteigend:

0e
1d
10a
10b
100c

mit meinem script geht alles so lange gut, wie keine doppelten array-elemente vorhanden sind, wenn aber doch welche drin sind, dann werden diese aus dem array gefiltert und weg gelassen, alle anderen elemente werden normal weiter verarbeitet.

also wie kann ich es realisieren, einen array ,auch mit doppelten elementen, auf-/ab- steigend zu sortieren?
gibt es dafür schon funktionen in php?


ich bin euch für jede hilfe dankbar.
__________________
Gruß |Coding

---
Qozido® - Die Bilderverwaltung mit Logbuch für Taucher und Schnorchler.

www.qozido.de
Mit Zitat antworten
  #2  
Alt 07.07.2002, 11:57:11
Ben20
Guest
 
Beiträge: n/a
Geht ein Array mit doppelten Elementen überhaupt? Normalerweise müßte PHP den alten Wert doch überschreiben, sobald man einen neuen Wert mit gleichem Key übergibt, oder?

Bsp:
PHP-Code:

$array
["a"] = 10;
$array["a"] = 100;



echo 
$array["a"]; 
Ausgabe: 100



Hast Du die Sortiererei schon mal mit Multisort versucht?
Mit Zitat antworten
  #3  
Alt 07.07.2002, 14:04:45
Benutzerbild von |Coding
|Coding |Coding ist offline
Administrator
 
Registriert seit: Apr 2002
Ort: Bergheim
Alter: 41
Beiträge: 5.255
|Coding eine Nachricht über Skype™ schicken
jo, ich hab es eigentlich mit allen mitteln die ich in selfphp gefunden habe probiert.


mit:

sort
asort
arsort
usort
ksort
natsort
rsort


und auch mit diesen beiden:

uasort
uksort

ich weis allerdings auch nicht was sich mir bie den beiden letzten funktionen für möglichkeiten ergeben, weil...

Zitat:
ich zitiere aus SELFPHP
Die Funktion uasort() sortiert ein Array (array) nach den Werten seiner Elemente
auf Basis der Reihenfolge, die von einer benutzerdefinierten Funktion
(cmp_function) vorgegeben wird. Die Zuordnung von Schlüssel und Wert bleibt
dabei erhalten...

Zitat:
ich zitiere aus SELFPHP
Die Funktion uksort() sortiert ein Array (array) nach den Schlüsseln seiner
Elemente auf Basis der Reihenfolge, die von einer benutzerdefinierten Funktion
(cmp_function) vorgegeben wird. Die Zuordnung von Schlüssel und Wert bleibt
dabei erhalten...

was kann ich da nur machen?

hier mal mein script mit dem alles soweit klappt, wie keine doppelten einträge vorhanden sind.


inhalt der datei "file.txt":

asdfasdf(.)(.)fgsfgsfg(.)(.)sdfgsdfgsgf
sdfgsdf(.)(.)r345t(.)(.)j78ik
pöpäi(.)(.)uilhhu9h(.)(.)lhjklhl
jkghjkgkghjk(.)(.)ghjkgjkghjk(.)(.)ghjkghjk775


PHP-Code:
by col0:
<select name="sort_by" onchange="window.location=('test.php?sort=&sort_by=col0&type='+this.options[this.selectedIndex].value)">
    <option value="">wählen</option>
    <option value="up">aufsteigend</option>
    <option value="down">absteigend</option>
</select>
by col2:
<select name="sort_by" onchange="window.location=('test.php?sort=&sort_by=col2&type='+this.options[this.selectedIndex].value)">
    <option value="">wählen</option>
    <option value="up">aufsteigend</option>
    <option value="down">absteigend</option>
</select>
<?
if(isset($sort)) // sortieren starten?
{
    $file = 'file.txt'; // text datei
    $fpr = fopen($file, 'r'); // oeffnen
    echo '<table>'; // table "start" tag
    while(!feof($fpr)) // datei auslesen
    {
        // optimieren der zeilen und modifiziert in variable data
        // speichern
        $data = ltrim(chop(fgets($fpr, 1000)));

        // "datasplitting" col0 und col2 aus zeile extrahieren. trennzeichen ist (.)(.)
        $data = explode('(.)(.)', $data);

        switch($sort_by) // sortieren nach...
        {    
            // nach col0 sortieren
            default:
            case 'col0':

                 // col2 als array-key und col0 als array-value
                 // in array uebergeben
                 $array[$data[2]] = $data[0];
                 break;

            // nach col2 sortieren
            case 'col2':

                 // col0 als array-key und col2 als array-value
                 // in array uebergeben
                 $array[$data[0]] = $data[2];
                 break;

        } // ende switch

    } // ende datei auslesen
    
    // type = aufsteigend? dann asort und array-value sortieren
    if($type == 'up') asort($array);
    
    // type = absteigend? dann asort und array-value sortieren
    if($type == 'down') arsort($array);

    // array-key und array-value aus array auslesen
    while(list($key, $value) = each($array))
    {
        // array-value und array-key in tabellenzelle ausgeben
        echo '<tr><td width="200">'.$value.'</td><td width="200">'.$key.'</td></tr>';
    } // end key und value auslesen

    echo '</table>'; // tabelle schliessen

} // ende sortieren starten?
?>
vielleicht kann mir wer helfen...


P.S. ja, ich weis mein trennzeichen sieht aus wie zwei titten ;-)
der mittlere wert des text files fällt beim sortieren weg, bzw. ich filtere ihn mit dem script vorher raus.
__________________
Gruß |Coding

---
Qozido® - Die Bilderverwaltung mit Logbuch für Taucher und Schnorchler.

www.qozido.de
Mit Zitat antworten
  #4  
Alt 07.07.2002, 14:19:01
Benutzerbild von |Coding
|Coding |Coding ist offline
Administrator
 
Registriert seit: Apr 2002
Ort: Bergheim
Alter: 41
Beiträge: 5.255
|Coding eine Nachricht über Skype™ schicken
ich hab gerade heraus gefunden, dass wenn ich mit arsort() und asort() sortiere und doppelte array-values vorhanden sind, wird mit dem array-kay weiter sortiert.

allerdings beibt immer noch das problem mit denn doppelten array-keys, wenn diese vorhanden sind, werde alle doppelte array-kays mit dem letzten, aus der doppelten array-key "gruppe", überschrieben, wie es auch Ben20 schon in seinem posting gezeigt hat.
__________________
Gruß |Coding

---
Qozido® - Die Bilderverwaltung mit Logbuch für Taucher und Schnorchler.

www.qozido.de
Mit Zitat antworten
  #5  
Alt 07.07.2002, 15:23:36
Benutzerbild von |Coding
|Coding |Coding ist offline
Administrator
 
Registriert seit: Apr 2002
Ort: Bergheim
Alter: 41
Beiträge: 5.255
|Coding eine Nachricht über Skype™ schicken
ok...
es war eine schwere geburt :-) aber ich hab es vollbracht.
da ich ausschliessen kann das erste spalte meiner text datei gleiche werte enthalten wird, kann ich diese spalte als array-key nutzen. mein script sieht also jetzt so aus:

PHP-Code:
by col0:
<select name="sort_by" onchange="window.location=('test.php?sort=&type=col0&sort_by='+this.options[this.selectedIndex].value)">
    <option value="">wählen</option>
    <option value="col0up">aufsteigend</option>
    <option value="col0down">absteigend</option>
</select>
by col2:
<select name="sort_by" onchange="window.location=('test.php?sort=&type=col2&sort_by='+this.options[this.selectedIndex].value)">
    <option value="">wählen</option>
    <option value="col2up">aufsteigend</option>
    <option value="col2down">absteigend</option>
</select>
<?
function up($ukey, $uvalue)
{
    if ($ukey == $uvalue) return 0;
    return ($ukey > $uvalue) ? -1 : 1;
}

function down($dkey, $dvalue)
{
    if ($dkey == $dvalue) return 0;
    return ($dkey > $dvalue) ? 1 : -1;
}

if(isset($sort))
{
    $file = 'file.txt';
    $fpr = fopen($file, 'r');
    echo '<table>';
    while(!feof($fpr))
    {
        $data = ltrim(chop(fgets($fpr, 1000)));
        $data = explode('(.)(.)', $data);
        $array[$data[0]] = $data[2];
    }

    switch($sort_by)
    {    
        case 'col0up':
            uksort($array, "up");
            break;
        case 'col0down':
            uksort($array, "down");
            break;
        case 'col2up':
            uasort($array, "up");
            break;
        case 'col2down':
            uasort($array, "down");
            break;
    }
    
    while(list($key, $value) = each($array))
    {
        if($type == 'col0')
            echo '<tr><td width="200">'.$key.'</td><td width="200">'.$value.'</td></tr>';
        if($type == 'col2')
            echo '<tr><td width="200">'.$value.'</td><td width="200">'.$key.'</td></tr>';
    }
    echo '</table>';
}
?>
allerdings habe ich mir die funktion up() und down() aus selfphp heraus kopiert. nun würde ich aber gerne wissen was in den funktionen diese

return ($ukey > $uvalue) ? -1 : 1;

bzw. diese

return ($dkey > $dvalue) ? 1 : -1;

zeilen bewirken. kann mir das mal jemand anschaulich erklären?
__________________
Gruß |Coding

---
Qozido® - Die Bilderverwaltung mit Logbuch für Taucher und Schnorchler.

www.qozido.de
Mit Zitat antworten
  #6  
Alt 08.07.2002, 18:10:42
markus.thiede markus.thiede ist offline
Anfänger
 
Registriert seit: Jun 2002
Ort: Köln
Alter: 41
Beiträge: 112
markus.thiede eine Nachricht über ICQ schicken
Das is ne if else Abfrage.

return ($ukey > $uvalue) ? -1 : 1;

entspricht

if($ukey > $uvalue)
{
return -1;
}
else
{
return 1;
}
__________________
Ein Programm schreibt man um ein
Problem zu lösen nur leider erhält
man mit jedem Program ein neues
Problem!

Mit Zitat antworten
  #7  
Alt 08.07.2002, 18:14:38
Benutzerbild von |Coding
|Coding |Coding ist offline
Administrator
 
Registriert seit: Apr 2002
Ort: Bergheim
Alter: 41
Beiträge: 5.255
|Coding eine Nachricht über Skype™ schicken
achsoooooo...

das muss man erst mal wissen. danke :-)
__________________
Gruß |Coding

---
Qozido® - Die Bilderverwaltung mit Logbuch für Taucher und Schnorchler.

www.qozido.de
Mit Zitat antworten
  #8  
Alt 09.07.2002, 01:21:01
markus.thiede markus.thiede ist offline
Anfänger
 
Registriert seit: Jun 2002
Ort: Köln
Alter: 41
Beiträge: 112
markus.thiede eine Nachricht über ICQ schicken
Ich kam auch auch ins stottern...

... als ich sowas das erste mal in nem C Quellcode sah.
(Schreibfaule Bande !)
__________________
Ein Programm schreibt man um ein
Problem zu lösen nur leider erhält
man mit jedem Program ein neues
Problem!

Mit Zitat antworten
Antwort


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 

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

BB-Code ist an.
Smileys sind aus.
[IMG] Code ist aus.
HTML-Code ist aus.

Gehe zu


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


Powered by vBulletin® Version 3.8.3 (Deutsch)
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.


© 2001-2024 E-Mail SELFPHP OHG, info@selfphp.deImpressumKontakt