Ankündigung

Einklappen
Keine Ankündigung bisher.

Array Inhalt sortieren, aber komplizierter

Einklappen

Neue Werbung 2019

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

  • Array Inhalt sortieren, aber komplizierter

    Hallo,

    ich habe folgenden Code:
    PHP-Code:
    <?


    $url = 'http://www.meineseite.de/1.html'; # :)

    $data = file_get_contents($url);
    preg_match_all("/AA(.*)FF/Us", $data, $array, PREG_SET_ORDER);

    asort ($array);
    foreach($array as $match) {
      
    echo $match[1]."<br>";
    }  

    $url = 'http://www.meineseite.de/2.html'; # :)

    $data = file_get_contents($url);
    preg_match_all("/AA(.*)FF/Us", $data, $array, PREG_SET_ORDER);

    asort ($array);
    foreach($array as $match) {
      
    echo $match[1]."<br>";
    }  

    ?>
    Es werden aus 2 verschiedene Seiten bestimmte Inhalte untereinander ausgegeben. Jeder Inhalt von einer Seite wird vor dem anzeigen alphabetisch sortiert. Das klappt für jede Seite auch gut. Aber wie kann man das lösen das erst zum Schluß alles (1.html + 2.html) alphabetisch sortiert wird.
    Zur Zeit sieht das Ergebnis so aus:

    PHP-Code:
    11 CC DD EE
    17 17 17 178 
    33 CC DD EE
    88 CC DD EE
    UU BB DE KH
    ----------------------------- Hier fängt der Inhalt der zweiten Seite an
    17 17 17 178 
    BB CC DD EE
    LL BB DE KH
    WW CC DD EE
    XX CC DD EE 
    Gelöst hätte ich das aber gerne so:
    PHP-Code:
    11 CC DD EE
    17 17 17 178 
    17 17 17 178 
    33 CC DD EE
    88 CC DD EE
    BB CC DD EE
    LL BB DE KH
    UU BB DE KH
    WW CC DD EE
    XX CC DD EE 
    Was müsste ich in dem Code ändern ?

    Das ganze soll auch mal für mehr als 2 Seiten funktionieren (also noch 3.html + 4.html usw...)

    Hoffentlich geht das überhaupt.

    Danke schon mal im voraus, Markus


  • #2
    Mach doch aus jedem Block zunächst ein Array und verwende array_merge().
    Competence-Center -> Enjoy the Informatrix
    PHProcks!Einsteiger freundliche TutorialsPreComposed Packages

    Kommentar


    • #3
      Jupp, der Tip mit array_merge war goldrichtig. Hat gefunzt. Vielen Dank

      Jetzt such ich noch eine spezielle Sortierfunktion:

      Als Beispiel:

      mit oben stehenden Code bekomme ich folgende Sortierung:

      BBB
      BBB
      KKK
      KKK
      KKK
      KKK
      LLL
      LLL
      LLL

      Halt alphabetisch

      Ich hätte aber gerne folgende Sortierung:

      KKK
      KKK
      KKK
      KKK
      LLL
      LLL
      LLL
      BBB
      BBB

      Nach Häufigkeit
      Da die Zeile KKK 4 mal vorkommt soll diese auch als gesamter Block ganz oben stehen. LLL kommt 3 mal vor und landet dann unter dem Block KKK und mit BBB dann ganz unten,weil am wenigsten vorhanden.

      Gibt es für sowas ein Sortierbefehl ?

      Gruss,Markus

      Kommentar


      • #4
        Bei einer herkömmlichen Sortierung werden jeweils zwei Elemente des Arrays miteinander verglichen, nach einem definierten Kriterium.
        Du müsstest dein Array also erst mal in eine Form bringen, in der dieses Kriterium für deinen speziellen Wunsch auch definiert ist - nämlich die Häufigkeit, und zwar für jedes einzelne Element des Arrays, damit es zur Verfügung steht, wenn zwei beliebige Elemente verglichen werden.

        Mit array_count_values und usort könnte man sich das sicher recht einfach selber basteln.

        Kommentar


        • #5
          Das bekomme ich leider nicht gebacken. Dann muss ich wohl auf diese spezielle Sortierung verzichten.

          Danke aber trotzdem


          Ps: oder kann mir dies ausnahmsweise jemand programmieren. Dürfte ja nur 1-2 Zeilen sein

          Markus

          Kommentar


          • #6
            Mag einfacher gehen.

            PHP-Code:
            <?php

            $data 
            = <<<EOT
            BBB
            BBB
            KKK
            KKK
            KKK
            KKK
            LLL
            LLL
            LLL
            EOT;

            $data explode("\n"$data);

            $tmp array_count_values($data);
            arsort($tmp);
            $data = array();

            foreach (
            $tmp as $value => $count) {
                for (
            $i 0$i $count$i++) {
                    
            $data[] = $value;
                }
            }

            print_r($data);

            Kommentar


            • #7
              Hab ich ausprobiert. Klappt leider nur teilweise. Das Ergebnis ist:

              KKK
              KKK
              KKK
              BBB
              BBB
              LLL
              LLL
              LLL

              Der LLL-Blocl steht leider als letzter, der muss aber nach dem KKK-Block kommen und BB-Block als letzter. Halt wie eine Top10.

              Gruss, Markus

              Kommentar


              • #8
                Es steht sicher hinter einer der LLL-Zeilen ein Leerzeichen ("LLL "). Bei mir geht der Code.

                Kommentar


                • #9
                  Der LLL-Blocl steht leider als letzter, der muss aber nach dem KKK-Block kommen und BB-Block als letzter.
                  Genau das passiert bei dem Beispiel von mermshaus

                  Jedenfalls kommt das bei mir so raus:
                  Code:
                  Array
                  (
                      [0] => KKK
                      [1] => KKK
                      [2] => KKK
                      [3] => KKK
                      [4] => LLL
                      [5] => LLL
                      [6] => LLL
                      [7] => BBB
                      [8] => BBB
                  )
                  EDIT:
                  Es steht sicher hinter einer der LLL-Zeilen ein Leerzeichen ("LLL ").
                  Für den Fall kann man die ja vor der Sortierung mit trim bearbeiten, wenns sein muß.
                  Competence-Center -> Enjoy the Informatrix
                  PHProcks!Einsteiger freundliche TutorialsPreComposed Packages

                  Kommentar


                  • #10
                    Hab den Fehler gefunden, ich musste nach der letzten AAA-Zeile einen Absatz einbauen:
                    PHP-Code:
                    $data = <<<EOT
                    BBB
                    BBB
                    KKK
                    KKK
                    KKK
                    KKK
                    UUU
                    UUU
                    UUU
                    UUU
                    UUU
                    AAA

                    EOT; 
                    Das sortieren funktioniert jetzt ja schon genau so wie ich mir das vorgestellt habe, danke dir mermshaus.

                    Nur funktioniert das jetzt ja nur als Beispiel weil die zu sortierenden Werte in $data definiert wurden. Da ich aber die Werte gar nicht im Code habe bzw. kenne, sondern von einer anderen Seite auslesen möchte, weiß ich jetzt gar nicht wie ich diesen Sortier-Code in dem obigen Code einbaue. Ich habs schon mal selber versucht, klappte leider nicht.

                    Kommentar


                    • #11
                      Ich habs schon mal selber versucht, klappte leider nicht
                      Wie hast das versucht?
                      Hat ja nicht viel mit der Sortierung von mermshaus zu tun, sondern eher damit, wie die Daten vorliegen bzw. geparst werden sollen!
                      Competence-Center -> Enjoy the Informatrix
                      PHProcks!Einsteiger freundliche TutorialsPreComposed Packages

                      Kommentar


                      • #12
                        ich habe es so versucht:
                        PHP-Code:
                        <?


                        $url = 'http://www.meineseite.de/6.html'; # :)

                        $data = file_get_contents($url);
                        preg_match_all('/AA(.*)FF/Us', $data, $array, PREG_SET_ORDER);


                        $array = explode("\n", $array);

                        $tmp = array_count_values($array);
                        arsort($tmp);
                        $array = array();

                        foreach ($tmp as $value => $count) {
                            for ($i = 0; $i < $count; $i++) {
                                $array[] = $value;
                            }
                        }

                        print_r($array);

                        ?>
                        Das Resultat ist:

                        Array ( [0] => Array )

                        Kommentar


                        • #13
                          Wir wissen nicht, wie deine Daten aufgebaut sind ...

                          Kommentar


                          • #14
                            Achso, hier die 6.html seite:

                            PHP-Code:
                            <html>

                            <
                            head>
                            <
                            meta http-equiv="Content-Language" content="de">
                            <
                            meta name="GENERATOR" content="Microsoft FrontPage 5.0">
                            <
                            meta name="ProgId" content="FrontPage.Editor.Document">
                            <
                            meta http-equiv="Content-Type" content="text/html; charset=windows-1252">
                            <
                            title>Neue Seite 1</title>
                            </
                            head>

                            <
                            body>

                            <
                            p>AA BBB FFF</p>
                            <
                            p>AA BBB FFF</p>
                            <
                            p>AA BBB FFF</p>
                            <
                            p>AA KKK FFF</p>
                            <
                            p>AA KKK FFF</p>
                            <
                            p>AA KKK FFF</p>
                            <
                            p>AA KKK FFF</p>
                            <
                            p>AA EEE FFF</p>
                            <
                            p>&nbsp;</p>

                            </
                            body>

                            </
                            html

                            Kommentar


                            • #15
                              Liefert mir nur Fehlermeldungen, wenn ich deinen Code damit teste.

                              Was ja auch klar ist, denn $array ist ein Array, und damit nicht als zweiter Parameter für explode geeignet.
                              Wenn du explode auf die einzelnen Elemente eines Arrays anwenden willst - dann musst du das auch Element für Element machen.

                              Kommentar

                              Lädt...
                              X