PHP: Parameter für array_multisort über Variable

Dieses Thema im Forum "Ruby, php, Perl, Python ..." wurde erstellt von nighT, 03.02.2011.

  1. nighT

    nighT Guest

    Hallo Leute,

    so langsam habe ich wohl eine PHP-Blockade entweickelt... Folgendes Problem:
    Ich habe einen Array, den ich gerne per array_multisort sortieren würde. Nun erzeuge ich den sortier-Parameter immer dynamisch, so dass ich ihn per Variable übergeben will.
    Folgende Versuche:
    funktioniert nicht:
    Code:
    $testVar = '$arraySort[Serial], SORT_ASC';
    array_multisort($testVar, $array);
    funktioniert:
    Code:
    array_multisort($arraySort[Serial], SORT_ASC, $array);
    Wie schaffe ich es, dass die erste Variante funktioniert?

    Liebe Grüße,
    Manuel L.
     
  2. Anzeige

    Schau dir mal diese Kategorie an. Dort findest du bestimmt etwas.
    Registrieren bzw. einloggen, um diese und auch andere Anzeigen zu deaktivieren
  3. Tblue

    Tblue Tripel-As

    Dabei seit:
    27.11.2007
    Beiträge:
    188
    Zustimmungen:
    0
    Kein Wunder, $testVar enthält nun einen String und ist kein Array mehr!

    Dass diese Variante funktioniert, ist wiederum kein Wunder, denn nun übergibst du ja ein Array (angenommen, der key 'Serial' enthält ein Array).

    Ein Schönheitsfehler: Keys sind entweder Integer oder Strings -- wenn du Serial ohne Anführungszeichen schreibst, denkt PHP, das wäre eine Konstante und tut nun etwas ganz PHP-typisches (hmpf!): Anstatt einfach einen Fehler auszugeben, zeigt es eine Notice und behandelt die nicht-existierende Konstante so wie den String 'Serial' (also so, als wenn du Anführungszeichen verwendet hättest). Der obige Code funktioniert also, ist aber unsauber.

    Nun zu deinem eigentlichen Problem. Was ist denn bei dir nicht dynamisch? Ist es nur der Variablenname? Dann würde das so funktionieren:
    PHP:
    $key 'Serial';
    $sortOrder SORT_ASC;
    // $key und $sortOrder setzt du natürlich dynamisch.

    array_multisort$arraySort[$key], $sortOrder$array );
    Ist auch der Variablenname dynamisch, kannst du das so machen:
    PHP:
    // Die nächsten drei Variablen setzt du auch hier dynamisch.
    $varName 'arraySort';
    $key 'Serial';
    $sortOrder SORT_ASC;

    array_multisort( ${$varName}[$key], $sortOrder$array );
     
  4. nighT

    nighT Guest

    Okay. Schon Mal vielen Dank.
    Mit dem simplen Beispiel funktioniert das nun Problemlos.
    Trotzdem habe ich nun noch ein Problem:
    Ich erzeuge per foreach-Schleife, basierend auf einem Array, unterschiedlich viele Suchparameter. Mal keiner, mal einer, mal mehrere.
    Der Variablenname ($arraySort) ist konstant. $key ändert sich dynamisch zu dem sortierenden Eintrag und die Sortorder wird dann ebenfalls dynamisch erzeugt.
    Wie schaffe ich es nun also dynamisch unterschiedlich viele Kriterien in den multisort unterzubringen?
     
  5. Tblue

    Tblue Tripel-As

    Dabei seit:
    27.11.2007
    Beiträge:
    188
    Zustimmungen:
    0
    Hm, wie wär's denn damit (ungetestet):

    PHP:
    $multisort_args = array();

    foreach( 
    $arraySort as $v )
    {
      
    $multisort_args[] = $v;
      
    $multisort_args[] = SORT_ASC;
    }

    $multisort_args[] = $array;
    call_user_func_array'array_multisort'$multisort_args );
    $multisort_args enthält einfach die Parameter für array_multisort().

    Vielleicht habe ich auch nicht genau verstanden, was du eigentlich willst... :)
     
  6. #5 nighT, 09.02.2011
    Zuletzt von einem Moderator bearbeitet: 10.02.2011
    nighT

    nighT Guest

    Hi,
    Sorry, dass ich mich länger nicht gemeldet habe. Komme erst jetzt wieder zu diesem Problem.
    Leider bekomme ich es mit deinem neuen Beispiel immer noch nicht hin. Ich kann nicht einmal genau sagen, wo der Fehler liegt. :(

    Ich versuche noch mal alle nötigen Informationen zusammen zu fassen. Am besten alle Informationen, Variablennamen usw. von oben vergessen. Es hat sich dort auch einiges geändert:

    Ich habe ein Array $arrresult, welches das Ergebnis der Datenbank beinhaltet (Im Beispiel 2 Einträge):
    Code:
    Array (
        [0] => Array (
            [ActionTime] => 09-FEB-11 09.21.45.000000 AM 
            [ActionCode] => U 
            [Serial] => 657541 
            [FirstOccurrence] => 09-FEB-11 09.16.24.000000 AM 
            [firm_objekt] => server01 
            [Summary] => WASHighResponseTime 
            [Identifier] => WASHighResponseTime:AppProduc#23:server01:KYNS:artikel-pflege:ITM_Request_Times_and_Rates 
            [LastOccurrence] => 09-FEB-11 09.21.23.000000 AM 
            [StateChange] => 09-FEB-11 09.21.23.000000 AM 
            [Acknowledged] => 0 
            [AlertGroup] => ITM_Request_Times_and_Rates 
            [Node] => AppProduc#23:server01:KYNS 
            [Tally] => 2 
            [Type] => 20 
            [ExpireTime] => 0 
            [SuppressEscl] => 0 
            [Agent] => ITM 
            [Manager] => tivoli_eif probe on oglxtion1.domain.de 
            [Severity] => 0
        ) 
    
        [1] => Array (
            [ActionTime] => 09-FEB-11 09.21.45.000000 AM 
            [ActionCode] => U 
            [Serial] => 657542 
            [FirstOccurrence] => 09-FEB-11 09.16.24.000000 AM 
            [firm_objekt] => server02 
            [Summary] => WASHighResponseTime 
            [Identifier] => WASHighResponseTime:AppProduc#23:server02:KYNS::ITM_Request_Times_and_Rates 
            [LastOccurrence] => 09-FEB-11 09.21.20.000000 AM 
            [StateChange] => 09-FEB-11 09.21.20.000000 AM 
            [Acknowledged] => 0 
            [AlertGroup] => ITM_Request_Times_and_Rates 
            [Node] => AppProduc#23:server02:KYNS 
            [Tally] => 2 
            [Type] => 20 
            [ExpireTime] => 0 
            [SuppressEscl] => 0 
            [Agent] => ITM 
            [Manager] => tivoli_eif probe on oglxtion1.domain.de 
            [Severity] => 0
        )
    ) 
    
    Dann habe ich eine Session $_SESSION['sorting'] (ebenfalls Array) welches die Sortierung beinhaltet (im Beispiel zwei Kriterien). In der Reihenfolge, in der die Einträge im Array stehen, soll auch sortiert werden. Zuerst nach Serial, dann nach FirstOccurence
    Code:
    Array (
        [Serial] => ASC
        [FirstOccurrence] => DESC
    ) 
    
    Diese beiden Array's sind die Grundlage.

    Mit folgendem Code kann ich bereits speziell nach Serial sortieren:
    Code:
    foreach ($_SESSION['sorting'] as $sortkey => $sortrow) {
            foreach ($arrresult as $key => $row) {
    
                $arraySort[$sortkey][$key] = $row[$sortkey];        
    
            }
        }
        
        array_multisort($arraySort[Serial], SORT_DESC, $arrresult);
    
    Wie man sieht, ist die array_multisort-Funktion im Moment direkt im Code gesetzt. Diese soll nun dynamisch erzeugt werden. Sprich die Sortierkriterien aus $_SESSION['sorting'] beinhalten. Diese Kriterien können unterschiedlich viele sein. Je nach dem, was der Anwender später auswählt.

    Ich hoffe, nun sind alle nötigen Informationen angegeben und das Problem ist Sinnvoll geschildert.

    Ich würde mich sehr über eine Antwort freuen - auch wenn das Problem (vielleicht) total simpel zu lösen ist. :think:

    Viele Grüße,
    Manuel
    ---------------------
    Edit: Ich habe die Frage hier nochmal gestellt, da es dort im Forum wohl besser aufgehoben ist :)
    Trotzdem vielen Dank für deine Hilfe.
    Falls dir noch weitere Ansätze einfallen, bin ich sehr offen dafür.
     
Thema:

PHP: Parameter für array_multisort über Variable

Die Seite wird geladen...

PHP: Parameter für array_multisort über Variable - Ähnliche Themen

  1. Syntax für LDAP Parameter

    Syntax für LDAP Parameter: System: Suse 10.2 X386 PDC (Samba) installierte Dienste auf Server: LDAP, Wifidog Auth, Radius, Postgresql, AP WRT54gl Openwrt Kamikaze...
  2. [gelöst] [php] für Webservice aus string einzelne funktionsparameter rausholen

    [gelöst] [php] für Webservice aus string einzelne funktionsparameter rausholen: hallo, ich habe folgendes Problem und hoffe, dass jemand da etwas hilfestellung geben kann. ich habe einen string, der hat die form...
  3. Kommandozeilenparameter für YaST

    Kommandozeilenparameter für YaST: Hi, ich hab schon ziemlich viel danach gegoogelt leider nur mit dem Ergebnis das der -i und einiger Sendmail parameter. Mich würde aber...
  4. parameter für header ?

    parameter für header ?: servus leutz sorry henge immer noch am selben thema? (thema mail) ich wollt fragen ob jemand weis wie ich ne header mit mail mitschicke...
  5. [Gelöst] Suchen und ersetzen mit Hilfe mehrerer Parameter

    [Gelöst] Suchen und ersetzen mit Hilfe mehrerer Parameter: Hallo zusammen, ich bin an einem Punkt angekommen, wo ich nicht mehr weiter komme und hoffe ihr könnt mir weiter helfen. Anbei ein Ausschnitt aus...