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 ::

PHP 5.3 & MySQL 5.1

PHP 5.3 & MySQL 5.1 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

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.12.2003, 22:23:51
Sidey Sidey ist offline
Anfänger
 
Registriert seit: Dec 2003
Beiträge: 3
Sortieren eines Arrays mit Objekten verschiedener Verschachtelung

Hi,

ich habe im Forum nichts finden können, das mein Vorhaben / Problem beschreibt.

Also ich habe einen array der mehrere Objekte behinhaltet.


z.B. folgendes

$arr[1]->gegenstand->techlevel
oder
$arr[1]->gegenstand->werte->gewicht

gegenstand ein ein Objekt
werte ist ein Objekt
techlevel ist eine Variable
$gewicht ist eine Variable

Sortieren kann ich letztendlich also nur nach den Variablen 'techlevel' und 'gewicht', denn nach den Objekte zu sortieren macht kaum Sinn.


Ich habe also folgenden Code gestrickt.

$what bestimmt die Hirarchie, welche verglichen werden soll. Zwecks test wird $what noch in dieser Funktion gesetzt, später sollten diese Werte natürlich übergeben werden.
$arr ist der array mit den Objekten und unterobjekten.

function sort_array($arr)
{
$arraysize = sizeof($arr) ;
$i=0;
$tmp=0;
$change = true;

$what = array("gegenstand", "wert","gewicht");
/*
* $what muss die einzelnen Objekt namen und zuletzt den Variablen Namen enthalten
* $what = array("gegenstand", "techlevel");
*/


while( $i<$arraysize && $change ):
$j=0;
$troca = false;
while( $j < $arraysize-$i-1 ):
switch (sizeof($what)) {
case 1:
$a=$arr[$j]->{$what[0]};
$b=$arr[$j+1]->{$what[0]};
break;
case 2:
$a=$arr[$j]->{$what[0]}->{$what[1]};
$b=$arr[$j+1]->{$what[0]}->{$what[1]};
break;
case 3:
$a=$arr[$j]->{$what[0]}->{$what[1]}->{$what[2]};
$b=$arr[$j+1]->{$what[0]}->{$what[1]}->{$what[2]};
break;
}
if ($a > $b):
$tmp = $arr[$j];
$arr[$j] = $arr[$j+1];
$arr[$j+1] = $tmp;
$troca = true;
endif;
$j++;
endwhile;
$i++;
endwhile;
return $arr;
}


So, das ganze ist ein Bubblesort der ziemlich unübersichtlich geworden ist. Ausserdem kommt er nur mit 1, 2 oder 3 Werten im Array $what klar. Ich würde das ganze viel lieber etwas dynamischer aufbauen. Geht das irgendwie? Ich habs bisher noch nicht geschaft den Operator '->' in einer Variable zu speichern und dann einen Aufruf wie folgt zu realisieren:

$a= $arr[$j]."->".{$what[0]}";
$b= $arr[$j+1]."->".{$what[0]}";
if ($a > $b):


Gruß Sidey
Mit Zitat antworten
  #2  
Alt 08.12.2003, 18:42:20
Fuchs Fuchs ist offline
Junior Member
 
Registriert seit: Jul 2003
Beiträge: 182
Ich persoenlich wuerde das ja nie hernehmen, so viel pfusch is des. (Ich wuerde mir eher ueberlegen ob ich meine Objekt Hirarchie nicht besser organisieren kann). Aber naja:
PHP-Code:
$arr[] = new StdClass;
$arr[] = new StdClass;
$arr[] = new StdClass;
$arr[] = new StdClass;
$arr[] = new StdClass;

foreach (
$arr as $key => $class){
    
$arr[$key]->gegenstand = new StdClass;
    
$arr[$key]->gegenstand->werte = new StdClass;
    
$arr[$key]->gegenstand->werte->gewicht rand();
    
$arr[$key]->gegenstand->techlevel rand();
}
$what = array('gegenstand''techlevel');
$whatObj implode('->'$what);
$cmpFunc create_function('&$a, &$b''return $a->'.$whatObj.' == $b->'.$whatObj.' ? 0 : ($a->'.
                                       
$whatObj.' < $b->'.$whatObj.' ? -1 : 1);');

usort($arr$cmpFunc);
print_r($arr); 
Mit Zitat antworten
  #3  
Alt 08.12.2003, 21:10:32
Sidey Sidey ist offline
Anfänger
 
Registriert seit: Dec 2003
Beiträge: 3
Hi,

danke genau sowas hatte ich gemeint.

Aber wieso ist das alles nix? Also meine Objektsruktur sieht wesentlich komplexer aus als der Beispielcode den ich da hatte.

Was meinst Du mit aufräumen ? Ich konnte da nicht ganz folgen.


Gruß Sid
Mit Zitat antworten
Antwort


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 
Themen-Optionen
Ansicht

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 09:46:07 Uhr.


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


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