php-resource



Zurück   PHP-Scripte PHP-Tutorials PHP-Jobs und vieles mehr > Entwicklung > PHP Developer Forum
 

Login

 
eingeloggt bleiben
star Jetzt registrieren   star Passwort vergessen
 

 

 


PHP Developer Forum Hier habt ihr die Möglichkeit, eure Skriptprobleme mit anderen Anwendern zu diskutieren. Seid so fair und beantwortet auch Fragen von anderen Anwendern. Dieses Forum ist sowohl für ANFÄNGER als auch für PHP-Profis! Fragen zu Laravel, YII oder anderen PHP-Frameworks.

Antwort
 
LinkBack Themen-Optionen Thema bewerten
  #1 (permalink)  
Alt 12-06-2006, 17:13
Danni78h
 Newbie
Links : Onlinestatus : Danni78h ist offline
Registriert seit: Jun 2006
Beiträge: 12
Danni78h ist zur Zeit noch ein unbeschriebenes Blatt
Unhappy Objekte sortieren nach bestimmten Kriterien

Hallo!
Ich brauch mal Eure Hilfe...
Bin totale Anfängerin und versteh noch nicht so viel von PHP...

Folgendes Problem:
Ich habe Ergebnisse einer Suche, die ich sortieren möchte.
Die Ergebnismenge ist eine Sammlung von Objekten (Literaturtitel)
Jedes Objekt besitzt viele Eigenschaften, nach denen ich sortieren möchte.
Die Sortierung muss auf PHP-Ebene stattfinden, nicht auf SQL-Ebene.

Ich wollte das eigentlich mit usort() lösen, doch bei leeren Einträgen werden die
Objekte dazwischen sortiert und nicht ans Ende. Schätze, mit der Vergleichsfunktion stimmt etwas nicht...

Ein Beispiel:
Meine Titel besitzen u.a. ein Erscheinungsjahr, aber eben nicht alle...

Der Code für die Vergleichsfunktion:

PHP-Code:
function vergleicheErscheinungsjahrAsc($titel1$titel2)
{    
    if (
$titel1->erscheinungsjahr == $titel2->erscheinungsjahr
    {
        return 
0;
    }
    else if (
$titel1->erscheinungsjahr == 0
    {
        return 
1;
      } 
    else if (
$titel1->erscheinungsjahr $titel2->erscheinungsjahr
    {
        return -
1;
    } 
    else
    {
        return 
1;
    }

Der Aufruf:
PHP-Code:
$sortierung "vergleicheErscheinungsjahrAsc"
usort($titel$sortierung); 


... wobei ich den Code auch nicht verstehe und ihn aus dem Internet umgebastelt habe... ;-)
doch ohne Leereinträge funktioniert's schon.
Alles seltsam.

Habt Ihr eine Idee?
Liebe Grüße
Danni

Geändert von Danni78h (12-06-2006 um 17:19 Uhr)
Mit Zitat antworten
  #2 (permalink)  
Alt 12-06-2006, 17:54
Slava
 PHP Senior
Links : Onlinestatus : Slava ist offline
Registriert seit: Nov 2002
Ort: Köln->Karlsruhe
Beiträge: 1.589
Slava befindet sich auf einem aufstrebenden Ast
Standard

versuch bitte so:
sorge aber dafür, dass erscheinungsjahr immer initialisiert ist, also wenigstens 0 muss drin stehen.
PHP-Code:
function vergleicheErscheinungsjahrAsc($titel1$titel2)
{    
    if (
$titel1->erscheinungsjahr == $titel2->erscheinungsjahr
    {
        return 
0;
    }
     if (
$titel1->erscheinungsjahr $titel2->erscheinungsjahr
    {
        return -
1;
    } 
    
        return 
1;
    

Mit Zitat antworten
  #3 (permalink)  
Alt 12-06-2006, 18:20
Danni78h
 Newbie
Links : Onlinestatus : Danni78h ist offline
Registriert seit: Jun 2006
Beiträge: 12
Danni78h ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Hallo Slava!

Dank Dir für die schnelle Antwort . So hatte ich's davor schon mal, aber dann werden ja die 0er Einträge an den Anfang gestellt und das möchte ich nicht. Wie bekomme ich die leeren Einträge nach hinten?

Ganz LG
Danni
Mit Zitat antworten
  #4 (permalink)  
Alt 12-06-2006, 18:44
Slava
 PHP Senior
Links : Onlinestatus : Slava ist offline
Registriert seit: Nov 2002
Ort: Köln->Karlsruhe
Beiträge: 1.589
Slava befindet sich auf einem aufstrebenden Ast
Standard

so?
PHP-Code:
function vergleicheErscheinungsjahrAsc($titel1$titel2)
{    
    if (
$titel1->erscheinungsjahr == $titel2->erscheinungsjahr
    {
        return 
0;
    }
     if (
$titel1->erscheinungsjahr $titel2->erscheinungsjahr
    {
        return -
1;
    } 
    if(
$titel1->erscheinungsjahr=="" )
        return 
1;
      return 
1;
    

Mit Zitat antworten
  #5 (permalink)  
Alt 12-06-2006, 18:56
Danni78h
 Newbie
Links : Onlinestatus : Danni78h ist offline
Registriert seit: Jun 2006
Beiträge: 12
Danni78h ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Glaub nicht... Da ist doch jetzt kein Unterschied zu meinem drin, oder *verwirrtbin*?
Leere Einträge haben bei mir den Wert 0, also nicht "". Und mit meinem funktioniert's halt nicht wirklich...
Mit Zitat antworten
  #6 (permalink)  
Alt 12-06-2006, 19:27
Slava
 PHP Senior
Links : Onlinestatus : Slava ist offline
Registriert seit: Nov 2002
Ort: Köln->Karlsruhe
Beiträge: 1.589
Slava befindet sich auf einem aufstrebenden Ast
Standard

dann schtimmt mit deinem Array was nicht.
Damit du funktionalität von usort nachvolziehen kannst
zeige ich dir ein beispiel.
Diese programmiertechnik heist "ereignisorientiert" und wird oft bei java angewendet , ist auch in PHP wie z.b.s bei xml-parser oder usort zu sehen.

ich mache einfach ein beispiel mit bubblesort.

PHP-Code:
//bublesort
function bubble_sort($array,$comparefunction){
  
$zcount=count($array);
  for(
$i=1;$i<$zcount;$i++){
     for (
$a=$zcount-1;$a>=$i;$a--) {
//hier lasse ich dich entscheiden welche vergleichmechanismus du einbaust
//vorraussetzung deine function muss 2 parameter zum vergleichen haben
//und ein zahl liefern
       
if($comparefunction($array[$a-1],$array[$a])>0){
         
$tempzal=$array[$a-1];
         
$array[$a-1]=$array[$a];
         
$array[$a]=$tempzal;
        }     
     }     
    }
    return 
$array;
}

//jetzt mache ich so eine function die vergleichen ermöglicht
function aufsteigend($a,$b){
 if(
$a<$b)return -1;
 if(
$a==$b)return 0;
 return 
1;
}

//jetzt testen wir
$ar=array(2,6,3,1);
print_r(bubble_sort($ar,"aufsteigend"));

//oder absteigend
function absteigend($a,$b){
 if(
$a>$b)return -1;
 if(
$a==$b)return 0;
 return 
1;
}
print_r(bubble_sort($ar,"absteigend")); 
Ich hoffe, dass diese EVENT-orientierte Technik für dich ein wenig besser verstanden wurde
Mit Zitat antworten
  #7 (permalink)  
Alt 12-06-2006, 19:56
Danni78h
 Newbie
Links : Onlinestatus : Danni78h ist offline
Registriert seit: Jun 2006
Beiträge: 12
Danni78h ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Danke für Deine Mühe, versteh's jetzt glaub ich schon...

Allerdings frag ich mich nun wieder, was dann nicht geht ... Mir scheint, mein ganzes Programm ist in sich nicht stimmig. Kann es leider nicht posten, weiss ja nicht, an welcher Stelle das Problem auftritt... Und ich habe VIELE Dateien. Gut, dann kann ich die Sortierfunktion an dieser Stelle für die Fehlfunktion schon mal ausschliessen... ist ja auch was.
Schönen Abend!!
LG
Danni
Mit Zitat antworten
  #8 (permalink)  
Alt 12-06-2006, 23:24
Slava
 PHP Senior
Links : Onlinestatus : Slava ist offline
Registriert seit: Nov 2002
Ort: Köln->Karlsruhe
Beiträge: 1.589
Slava befindet sich auf einem aufstrebenden Ast
Standard

nein!
das liegt schon in dieser function
mann muss aber der fall mit 0 als erste abfragen, sonnst kommt es in meisten fällen zu dieser abfrage gar nicht
PHP-Code:
function vergleicheErscheinungsjahrAsc($titel1$titel2)
{    
    if(
$titel1->erscheinungsjahr=="" || $titel1->erscheinungsjahr==)
        return 
1;

  if (
$titel1->erscheinungsjahr == $titel2->erscheinungsjahr
    {
        return 
0;
    }
     if (
$titel1->erscheinungsjahr $titel2->erscheinungsjahr
    {
        return -
1;
    } 
          return 
1;
    

Mit Zitat antworten
  #9 (permalink)  
Alt 14-06-2013, 19:02
klein-artur
 Registrierter Benutzer
Links : Onlinestatus : klein-artur ist offline
Registriert seit: Jun 2013
Beiträge: 1
klein-artur befindet sich auf einem aufstrebenden Ast
Standard Folgende Funktion habe ich extra dafür geschrieben

Siehe hier:

Tutorial

Aufruf und Benutzung steht alles dort beschrieben!

Der Vorteil an dieser Funktion ist, dass man beim Aufruf der Sortierfunktion mehrere Felder angeben kann, nach denen dann Hirarchisch sortiert wird. Das Ganze übergibt man dann in einem Array! Aber siehe selbst!

Aufruf in deinem Falle wäre z. B.:
PHP-Code:
$sortDefinition = array("FeldName1" => "DESC""FeldName2" => "ASC""FeldName3" => "DESC");
$deinArray sortObj($deinArray$sortDefinition); 
Voila! Dein Array ist nach deinen Kriterien sortiert! Wie du die Funktion bei dir genau benutzt sieht du im oberen Link!

lg

klein Artur
Mit Zitat antworten
Antwort

Lesezeichen


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

Themen-Optionen
Thema bewerten
Thema bewerten:

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 an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an


PHP News

ebiz-trader 7.5.0 mit PHP7 Unterstützung veröffentlicht
ebiz-trader 7.5.0 mit PHP7 Unterstützung veröffentlichtDie bekannte Marktplatzsoftware ebiz-trader ist in der Version 7.5.0 veröffentlicht worden.

28.05.2018 | Berni

Wissensbestand in Unternehmen
Wissensbestand in UnternehmenLebenslanges Lernen und Weiterbilden sichert Wissensbestand in Unternehmen

25.05.2018 | Berni


 

Aktuelle PHP Scripte

ADSMAN V3 - Werbe-Manager ansehen ADSMAN V3 - Werbe-Manager

ADSMAN V3 - mehr als nur ein Bannermanager! Banner, Textanzeigen und PagePeel Manager! Mit ADSMAN PRO haben Sie die Marketinglösung für eine effektive und effiziente Werbeschaltung mit messbaren Ergebnissen. Unterstützt werden Bannerformate in beliebi

25.10.2018 virtualsystem | Kategorie: PHP/ Bannerverwaltung
PHP News und Artikel Script V2

News schreiben, verwalten, veröffentlichen. Dies ist jetzt mit dem neuen PHP News & Artikel System von virtualsystem.de noch einfacher. Die integrierte Multi-User-Funktion und der WYSIWYG-Editor (MS-Office ähnliche Bedienung) ermöglichen...

25.10.2018 virtualsystem | Kategorie: PHP/ News
Top-Side Guestbook

Gästebuch auf Textbasis (kein MySQL nötig) mit Smilies, Ip Sperre (Zeit selbst einstellbar), Spamschutz, Captcha (Code-Eingabe), BB-Code, Hitcounter, Löschfunktion, Editierfunktion, Kommentarfunktion, Kürzung langer Wörter, Seiten- bzw. Blätterfunktion, V

22.10.2018 webmaster10 | Kategorie: PHP/ Gaestebuch
 Alle PHP Scripte anzeigen

Alle Zeitangaben in WEZ +2. Es ist jetzt 13:19 Uhr.