Ankündigung

Einklappen
Keine Ankündigung bisher.

foreach Sortierung

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • foreach Sortierung

    Seid gegrüßt!

    Habe mich soeben erfolgreich registriert, mit meiner ersten Frage!

    Ich habe mehrere Arrays, welche jeweils einen "Inhalts-Typen" repräsentieren. Diese haben jeweils einen maschinenlesbaren Namen, sowie einen für Menschen lesbaren.

    Foreach sortiert derzeit nach den maschinenlesbaren.
    Das will ich ändern. Sortiert werden soll in Zukunft nach den Namen, gedacht für Menschen.

    Ein Array hat folgenden Aufbau (Auschnitt):
    Code:
    array(20) {
      ["maschinen_name"]=>
      object(stdClass)#123 (14) {
        ["name"]=>
        string(4) "Image (Menschen-Name)"
    Die Foreach-Schleife hat folgenden Aufbau. (get_types() zeigt alle Arrays mit den "Inhalts-Typen" an):
    PHP-Code:
    <?php
    foreach(get_types() as $schnipp => $schnapp {
     
    $var[$schnipp] = array (
     );
    }
    ?>
    Wie ändere ich diese Schleife ab, das nach ["name"] sortiert wird?

    Ich hoffe die Codeausschnitte reichen und ich hab nichts wichtiges weggeschnitten. Die "Langform" hätte ich auch noch, aber nur falls das hier keinen Sinn ergibt.

    Schönes Wochenende euch,
    SuperEngineer 64


  • #2
    Der Array-Aufbau hilft irgendwie mäßig um den Sinn dahinter zu verstehen.
    Was meinst du denn mit Sortieren?
    Achja, da ist ein Syntax-Fehler.
    Die mysql_* Erweiterung ist veraltet!
    Besser: mysqli_* oder (noch besser) PDO

    Kommentar


    • #3
      Hm ok. Dann doch die Vollversion.

      Ich habe ein CMS in welchem ich mehrere Inhaltstypen habe.

      Als Beispiel: Text und Image.

      node_type_get_types(); liefert folgendes:

      Code:
      array(20) {
      
      ["text"]=>
        object(stdClass)#140 (14) {
          ["type"]=>
          string(4) "text"
          ["name"]=>
          string(4) "Text"
          ["base"]=>
          string(12) "node_content"
          ["module"]=>
          string(33) "feature_drupal_blueprint_ct_lines"
          ["description"]=>
          string(0) ""
          ["help"]=>
          string(0) ""
          ["has_title"]=>
          string(1) "1"
          ["title_label"]=>
          string(14) "Internal Title"
          ["custom"]=>
          string(1) "0"
          ["modified"]=>
          string(1) "1"
          ["locked"]=>
          string(1) "1"
          ["disabled"]=>
          bool(false)
          ["orig_type"]=>
          string(4) "text"
          ["disabled_changed"]=>
          bool(false)
        }
      
      ["image"]=>
        object(stdClass)#128 (14) {
          ["type"]=>
          string(5) "image"
          ["name"]=>
          string(7) "A Image"
          ["base"]=>
          string(12) "node_content"
          ["module"]=>
          string(33) "feature_drupal_blueprint_ct_image"
          ["description"]=>
          string(0) ""
          ["help"]=>
          string(0) ""
          ["has_title"]=>
          string(1) "1"
          ["title_label"]=>
          string(14) "Internal Title"
          ["custom"]=>
          string(1) "0"
          ["modified"]=>
          string(1) "1"
          ["locked"]=>
          string(1) "1"
          ["disabled"]=>
          bool(false)
          ["orig_type"]=>
          string(5) "image"
          ["disabled_changed"]=>
          bool(false)
        }
      }

      Diese Funktion wird hier aufgerufen:
      PHP-Code:
      function ctools_node_content_type_content_types($plugin) {
        
      $ctools_content_types = array();

        foreach(
      node_type_get_types() as $name => $node_type) {
          
      $ctools_content_types[$name] = array(
            
      'title' => t('New @type', array('@type' => $node_type->name)),
            
      'description' => $node_type->description,
            
      'category' => array(t('Content')),
            
      'top level' => TRUE,
            
      'add form' => array(
              
      'ctools_node_content_type_add_form' => t('Add new @type', array('@type' => $node_type->name)),
              
      'ctools_node_content_type_edit_form' => array(
                
      'default' => TRUE// put wrapper here, not on the previous form.
                
      'title' => t('Configure display'),
              ),
            ),
            
      'edit form' => 'ctools_node_content_type_edit_form',
          );
        } 
      Und letztendlich bekomme ich eine Liste all meiner Inhaltstypen (Im Beispiel wären es text und image), vermutlich sortiert nach dem was in der ersten ["eckigen klammer"] steht. Was ich möchte, ist eine Sortierung nach dem was hinter ["name"]=> steht.

      Funktioniert das?


      Gruß,
      SE64

      Kommentar


      • #4
        ksort()
        Über 90% aller Gewaltverbrechen passieren innerhalb von 24 Stunden nach dem Konsum von Brot.

        Kommentar


        • #5
          Daran dachte ich auch schon. Nur möchte ich ja nach den Inhalten von "name" sortieren, (Einer Objekt-Eigenschaft?) und nicht nach Schlüsseln.

          Kommentar


          • #6
            Hallöchen,

            dann nimm usort() und veranstalte dein persönliches Sortier-Wunschkonzert.

            Viele Grüße,
            lotti

            Kommentar


            • #7
              OK - habs geschafft das Array zu sortieren wie ich möchte:

              PHP-Code:
                function cmp($a$b) {
                  return 
              strcmp($a->name$b->name);
                }

                
              $types node_type_get_types();
                
              usort($types"cmp"); 
              Leider kann ich $types nun nicht in der foreach-Schleife nutzen.
              Schon vor der Sortierung zeigt $types nur Inhalt an wenn ich es durch var_dump(); laufen lasse. Einfach in die Schleife eingetragen kommen keine Ergebnisse. Auch echo $types; liefert lediglich das Wort "Array".


              Wo liegt nun der Fehler?
              Danke für die Hilfe!


              Gruß,
              SE64

              Kommentar


              • #8
                echo kann nicht mit Arrays umgehen. Dafür nutzt du print_r
                Standards - Best Practices - AwesomePHP - Guideline für WebApps

                Kommentar


                • #9
                  Hallöchen,

                  Zitat von SuperEngineer64 Beitrag anzeigen
                  Leider kann ich $types nun nicht in der foreach-Schleife nutzen.
                  Schon vor der Sortierung zeigt $types nur Inhalt an wenn ich es durch var_dump(); laufen lasse. Einfach in die Schleife eingetragen kommen keine Ergebnisse. Auch echo $types; liefert lediglich das Wort "Array".
                  du scheiterst hier ganz klar an den absoluten Grundlagen. Um dir die Basics anzueignen, solltest du dir ein paar Tutorials oder Bücher ansehen und diese durcharbeiten, denn PHP ist ein komplexes Werkzeug. Um es sinnvoll verwenden zu können benötigt es nun mal Wissen und Erfahrung. Darüber hinaus empfehle ich dir die Verwendung der offiziellen PHP-Dokumentation. Diese beantwortet die meisten deiner grundlegenden Fragen - lerne damit umzugehen.

                  Viele Grüße,
                  lotti

                  Kommentar


                  • #10
                    Hab bereits mehrere duzend Stunden mit PHP-Grundlagen verbracht. Alle Kapitel zu Arrays, Schleifen, Strings und Co durchgearbeitet und soweit auch verstanden.

                    Vielleicht war ja das Buch unangemessen, was weiß ich: http://www.amazon.de/PHP-5-3-profess.../dp/3827327024

                    Aber mich mit den Grundlagen befasst, rausgeschrieben und probiert hab ich schon ne ganze Menge.


                    Danke für eure Antworten!

                    Gruß,
                    SE64

                    Kommentar

                    Lädt...
                    X