zwei arrays verknüpfen: sinnvolle zuordnung

Collapse
X
 
  • Filter
  • Time
  • Show
Clear All
new posts

  • zwei arrays verknüpfen: sinnvolle zuordnung

    Hi, ich (schon wieder) sitze gerade an einer Kopfnuss..

    Ich habe eine Textdatei nach Datum und Auftrag-Nummer durchsucht mit:

    PHP Code:
    $html file_get_contents('index.html');

    // html-tags entfernen
    $htm preg_replace("/(<\/?)(\w+)([^>]*>)/e""'\\1'.strtoupper('\\2').'\\3'"$html);

    // sucht Datum
    preg_match_all("#([0-9]{4})-([0-9]{1,2})-([0-9]{1,2})#"$htm$ausgabePREG_PATTERN_ORDER);

    // sucht Auftrag
    preg_match_all("#TID[-_][0-9a-f]+#"$htm$ausPREG_PATTERN_ORDER);

    // aus zwei mach eins
    $new_array array_merge($ausgabe$aus);

    // Testausgabe
    for ($i=0$i<count($new_array); $i++) 
    echo 
    print_r($new_array[$i]); 
    die Ausgabe sieht so aus:

    Array ( [0] => TID-668 [1] => TID-668a [2] => TID-669a [3] => TID-748 [4] )
    Array ( [0] => 2005-12-24 [1] => 2004-05-04 [2] => 2005-03-01 [3] => 2004-07-08 [4] )

    Ich suche einen Ansatz, wie ich die Daten miteinander verknüpfen kann.
    Also: TID-668 [1] gehört zu 2005-12-24 [1]
    Auftrag gefolgt von Datum ,dann wieder Autrag und dann Datum..
    in dieser Reihenfolge und nicht zuerst alle Aufträge und dann erst das Datum (wie array_merge(); es tut)

    array_multisort(); scheint mir nicht der richtige Ansatz zu sein...any ideas?

  • #2
    Re: zwei arrays verknüpfen: sinnvolle zuordnung

    Original geschrieben von Phillip
    Ich suche einen Ansatz, wie ich die Daten miteinander verknüpfen kann.
    Also: TID-668 [1] gehört zu 2005-12-24 [1]
    na da hast du's doch eigentlich selber schon geschrieben - greife über den index auf beide arrays zu, bspw. in einer schleife.
    I don't believe in rebirth. Actually, I never did in my whole lives.

    Comment


    • #3
      das gewünschte ergebnis erhalte ich, wenn ich z.B. das hier mache:
      PHP Code:
      preg_match_all("#([0-9]{4})-([0-9]{1,2})-([0-9]{1,2})#"$htm$ausgabePREG_SET_ORDER);

      preg_match_all("#TID[-_][0-9a-f]+#"$htm$ausPREG_SET_ORDER);

      echo 
      $aus[0][0] . ", " $ausgabe[0][0] . "\n"
      echo 
      "<br>";
      echo 
      $aus[1][0] . ", " $ausgabe[1][0] . "\n"
      Ergebnis:
      TID-668, 2005-12-24
      TID-668a, 2004-05-04

      Problem ist nur, dass ich um die 200 Datumseinträge und Autrags-Nr. habe in ständig variierender Anzahl. Also muss ne Schleife her.

      Ich muss also die arrays $ausgabe und $aus mit einer Variablen durchzählen und diese variablen dann ausgeben. Das habe ich mit je einer For-schleife versucht. Ergebnis ist, dass alles wieder hintereinander steht wie in meinem Beispiel oben. Und zwei for-schleifen ineinander zu verschachten ist blödsinnig...ich komme da nicht recht weiter...


      Comment


      • #4
        und wo ist dein ansatz ...?

        zwei gleich geordnete arrays parallel mit ner for-schleife auszugeben, sollte doch wirklich keine große kunst sein.
        I don't believe in rebirth. Actually, I never did in my whole lives.

        Comment


        • #5
          Tja, irgendwie hakt's heute...das hier habe ich ausprobiert
          mit array_merge:

          PHP Code:
          $new_array array_merge($ausgabe$aus);

          for (
          $i=0$i<count($new_array); $i++)   {

          echo(
          $new_array[$i][0]);   } 
          keine Zuordnung...

          ohne array_merge:

          jedes array (sowohl $ausgabe als auch $aus) einzeln mit einer for- schleife durchlaufen und das Ergebnis dann ausgeben mit:
          PHP Code:
          echo $aus[$i][0] . ", " $ausgabe[$j][0] . "\n"
          kann nicht funktionieren: je nachdem wo dei echo-ausgabe erfolgt wird min. eine schleife nicht berücksichtigt (das versteh' sogar ich).

          mit array_map(); habe ich auch schon probiert.

          Comment


          • #6
            PHP Code:
            for ($i 0$i min(count($ausgabe), count($aus)); $i++)
              echo 
            $ausgabe[$i] . ' -> ' $aus[$i] . "<br />\n"
            Aber wenn du wirklich das willst, dann "preg_matche" lieber gleich anders.

            Comment


            • #7
              Ahhh...
              PHP Code:

              for ($i 0$i min(count($ausgabe), count($aus)); $i++)
                echo 
              $ausgabe[$i][0] . ' -> ' $aus[$i][0] . "<br />\n"
              so klappt's...ich wusste nicht, dass min(); hier helfen kann..darauf soll einer kommen...

              Many Thanks!

              Comment

              Working...
              X